C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 为什么前向声明不适用于类?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
int main() {
    B bb;                           //does not compile (neither does class B bb;)
    C cc;                           //does not compile

    struct t tt;                    //compiles

    class B {};                     //HERE is the class B defination
    struct s { struct t * pt; };    //compiles
    struct t { struct s * ps; };

    return 0;
}

class C {};@H_874_6@ 
 

我刚刚修改了给出here的例子.

为什么结构转发声明有效,而不是类前向声明​​?

它是否与命名空间有关 – 标记命名空间和typedef命名空间?我知道没有typedef的结构定义会转到标记命名空间.

结构只是包含所有公共成员的类.所以,我希望他们的行为类似.

解决方法

前向声明适用于类,但其他时候你已经预期.
首先,你必须写B班;在你的主程序的代码之前.
然后你必须写B * bb;而不是B bb;.只能在类定义之后构造B类型的对象.

此行为的原因如下:编译器不知道它必须在堆栈上为B类实例分配多少字节,因为此信息取决于类的定义(当时您没有给出).然而,可以在B的前向声明之后构造指向类B的实例的指针,因为指针的大小是先前已知的(并且对于所有指针类型通常是相同的).

大佬总结

以上是大佬教程为你收集整理的c – 为什么前向声明不适用于类?全部内容,希望文章能够帮你解决c – 为什么前向声明不适用于类?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。