所以我完全难过了。我收到一个错误undefined reference to Transition::Transition()
这是我的一个类的默认构造函数,但我发誓我正确地做了一切。以下是我的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;
}
所以我知道我正确地链接了我的文件,因为我没有为vector本身带来任何错误,只是Transition transition
导致了我的问题。但是这里是踢球者,我的State state
工作得很好,基本上与Transition transition
基本相同。
这是我的完整转型。
#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
这是我的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;
}
显然我已经定义了对Transition :: Transition()的引用(以及我最初试图开始工作的其他构造函数,但是当我发现它没有工作时)出于某种原因,我只是尝试使用默认构造函数)。为了比较,这是我的state.h和state.cpp工作。
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
和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;
}
我不知道为什么两个构造函数都适用于State,但是它们都不适用于Transition。我一直在看这些文件半小时,我没有看错。谁能发现我的错误?就像我说的那样,driver.cpp肯定知道Transition,因为vector不会抛出任何错误,当我添加行Transition transition
时它会告诉我我有一些未定义的引用。如果我试图改变Transition的构造函数,那同样的事情。