0

我正在编写一个小型生成器,它从树对象结构中输出单个 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;
}

有什么建议/想法吗?谢谢。

4

2 回答 2

1

通常,您会这样做:

class A {

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

    void accessB();
  ...
};

然后在声明 A 和 B 之后的某个地方:

void A::accessB()
{
    global_b->setValue(1);
}
于 2013-08-07T19:38:43.987 回答
0

您的全局值可能应该是类静态值。

要使前向声明工作,您应该指定没有任何内联函数的类。然后稍后在文件中您可以编写:

inline void B::setValue(int i)
{
  j = i + A::global.getValue();
}
于 2013-08-07T19:41:30.863 回答