对我定义的东西的未定义引用

时间:2015-02-12 21:19:47

标签: c++ undefined-reference

所以我完全难过了。我收到一个错误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的构造函数,那同样的事情。

0 个答案:

没有答案