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

forward definition of c++ class member functions

本文关键字:定义 函数 成员 c++      更新时间:2023-10-16

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

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

通常,您会这样做:

class A {
    public:
    A() {}
    ~A() {}
    void accessB();
  ...
};

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

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

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

要使前向声明工作,您应该指定不带任何内联函数的类。然后在文件的后面,你可以写:

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