原本以为,所谓的前向引用声明,声明之后可以先用,后面补上实现,结果发现,我天真了。
下面的代码执行时候会报错,【使用了未定义的类型B】,优秀!
现在问题来了,这个前向引用声明的意义是什么?
class B; // 前向引用声明
class A {
public:
void fun(B b) {
cout << "这样执行也会报错,这个前向引用声明有什么意义?" << endl;
}
};
class B {
public:
void fun() {
cout << "CLASS B" << endl;
}
};
int main() {
A a;
B b;
a.fun(b);
return 0;
}
以我浅薄的理解来说,完全没有意义~
没有 forward declaration 无解。
forward declaration 只是说明这个符号是什么,但是没有提供定义。对于一个类来说,只是说明这个符号是一个类,并没有给出类的定义。之后可以定义这个类的指针、引用,但是不能使用它的成员(还不知道它有什么成员),不能构造它的对象(不知道怎么构造)。