c++类成员函数的正向定义
forward definition of c++ class member functions
我正在编写一个小型生成器,它从树对象结构在单个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();
}
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数