在C++中前向引用声明的意义是什么?即使后面补上定义之后,在定义之前使用执行还是会报错!

新手上路,请多包涵

原本以为,所谓的前向引用声明,声明之后可以先用,后面补上实现,结果发现,我天真了。

下面的代码执行时候会报错,【使用了未定义的类型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;

}

以我浅薄的理解来说,完全没有意义~

阅读 3.6k
2 个回答

struct A;

struct B {
    A* pA;
};

struct A {
    B* pB;
};

没有 forward declaration 无解。

forward declaration 只是说明这个符号是什么,但是没有提供定义。对于一个类来说,只是说明这个符号是一个类,并没有给出类的定义。之后可以定义这个类的指针、引用,但是不能使用它的成员(还不知道它有什么成员),不能构造它的对象(不知道怎么构造)。

意义就是支持c++操蛋的编译模型...当头文件需要相互引用时,保护宏导致每个头文件只被导入一次,所以两个相互引用的头文件一定有一个无法看到另一个,因此需要前置声明。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题