c ++类成员函数的前向定义

时间:2013-08-07 19:34:58

标签: c++ class forward-declaration

我正在编写一个小型生成器,它在一个树对象结构的单个cpp文件中输出c ++类(类的输出顺序由这个树给出,所以它是固定的。)

为了保持简单,我希望如果有办法将它全部保存在一个文件中。

问题是这些类有时会使用成员函数相互交互,并且前向声明无法正常工作。

示例:

#include <iostream>

using namespace std;


class B;
B* global_b=NULL;

class A;
A* global_a=NULL;

class A {

    public:
    A() {}
    ~A() {}

    void accessB()
    {
        global_b->setValue(1);
    }

    int getValue()
    {
        return 2;
    }

};

class B {
    public:
    B() : j(0) {}
    ~B(){}

    void setValue(int i)
    {
        j = i + global_a->getValue();
    }
    int j;
};


int main()
{
    global_b = new B();
    global_a = new A();

    global_a->accessB();
    cout << "Hello world!" << endl;
    return 0;
}

有任何建议/想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

通常,你会这样做:

class A {

    public:
    A() {}
    ~A() {}

    void accessB();
  ...
};

然后声明A和B之后的某处:

void A::accessB()
{
    global_b->setValue(1);
}

答案 1 :(得分:0)

你的全球价值应该是阶级静态。

为了使声明正常工作,您应该指定没有任何内联函数的类。然后在文件中你可以写:

inline void B::setValue(int i)
{
  j = i + A::global.getValue();
}