C ++中的双向关联

时间:2011-11-12 21:04:05

标签: c++

我一直在尝试定义两个类

class state03: public state
{
public:
    std::string name;   
    state03(bool inAcceptState, bool inRejectState)
    {
        setRejectState(inRejectState);
        setAcceptState(inAcceptState);
        name="State 03";
    }

    state * evalNextState(char input)
    {
         if(input==' ')
        {
            return this;
        }
         if(isalpha(input) || input=='_')
         {
             return new state04(false,false);
         }
        return new RejectState();
    }
};

class state04: public state
{
public:
    std::string name;
    state04(bool inAcceptState, bool inRejectState)
    {
        setRejectState(inRejectState);
        setAcceptState(inAcceptState);
        name="State 04";
    }
    state * evalNextState(char input)
    {
        if(isalnum(input) || input=='_')
        {
            return this;
        }
        if(input==',')
        {
            return new state03(false,false);
        }
        return new RejectState();
    }
};

并且由于编译器从上到下扫描代码,我收到此编译错误,类state04未定义,因为它在类state03之后定义...

那么如何实现双向关系?

2 个答案:

答案 0 :(得分:4)

您应该将实现细节移到单独的文件中,这是最好和最简单的方法:

<强> state03.h

class state03 : public state {
   // ...
   state * evalNextState(char input);
}

<强> state04.h

class state04 : public state {
   // ...
}

<强> state03.cpp

#include "state03.h"
#include "state04.h"

state * state03::evalNextState(char input) {
    // your code here
}

答案 1 :(得分:0)

从类定义中取出实现并将它们移动到实现文件中。