So I am completely stumped. I am getting an error undefined reference to Transition::Transition()
which is the default constructor for one of my classes, but I swear I'm doing everything correctly. Here's whats going on in my driver.cpp
...other includes and namespace std
#include"state.h"
#include"transition.h"
int main(...){
vector<State> stateVect;
vector<Transition> transVect;
State state;
Transition transition;
}
So I KNOW that I am correctly linking my files, because I am not getting any errors for vector itself, its just the Transition transition
causing me problems. But here's the kicker, my State state
works just fine and its the same thing as my Transition transition
basically.
Here is my full transition.h
#ifndef TRANSITION_H
#define TRANSITION_H
#include<string>
class Transition{
public:
//I know these all shouldn't be public, but that's not the point right now
int q;
string a;
int r;
string b;
string x;
Transition();
Transition(int q, string a, int r, string b, string x);
int getq();
string geta();
int getr();
string getb();
string getx();
};
#endif // TRANSITION_H
and here is my transition.cpp
using namespace std;
#include"transition.h"
//here it is!!!!!
Transition::Transition(){
}
//this is also somehow undefined
Transition::Transition(int qIn, string aIn, int rIn, string bIn, string xIn){
q = qIn;
a = aIn;
r = rIn;
b = bIn;
x = xIn;
}
int Transition::getq(){
return q;
}
string Transition::geta(){
return a;
}
int Transition::getr(){
return r;
}
string Transition::getb(){
return b;
}
string Transition::getx(){
return x;
}
Clearly I have defined a reference to Transition::Transition() (as well as the other constructor that's the one I was originally trying to get to work, but when I found that didn't work for some reason I just tried going with the default constructor). For comparison, here is my state.h and state.cpp which work.
state.h
#ifndef STATE_H
#define STATE_H
class State{
public:
int stateNum; //0 - 1,000
bool isAccept;
bool isReject;
bool isStart; //can be also reject XOR accept
State();
State(int stateNum, bool isAccept, bool isReject, bool isStart);
State& operator= (const State s);
int getNum();
void setAccept();
void setReject();
void setStart();
};
#endif //STATE_H
and state.cpp
using namespace std;
#include"state.h"
//works
State::State(){
}
//also works
State::State(int stateNumIn, bool isAcceptIn, bool isRejectIn, bool isStartIn){
stateNum = stateNumIn;
isAccept = isAcceptIn;
isReject = isRejectIn;
isStart = isStartIn;
}
State& State::operator= (const State s){
stateNum = s.stateNum;
isAccept = s.isAccept;
isReject = s.isReject;
isStart = s.isStart;
return *this;
}
int State::getNum(){
return stateNum;
}
void State::setAccept(){
isAccept = true;
}
void State::setReject(){
isReject = true;
}
void State::setStart(){
isStart = true;
}
I have no idea why both constructors work for State, but neither work for Transition. I've been looking at these files for half an hour and I see nothing wrong. Can anyone spot my error? Like I said, driver.cpp definitely knows about Transition, since vector throws no errors, its when I add the line Transition transition
that it tells me I have a reference to something undefined. Same thing if I try to value constructor of Transition.