C++ 类声明 类前置声明

来源:互联网 发布:淘宝开店店名可以改吗 编辑:程序博客网 时间:2024/06/09 15:56

参考自:https://www.cnblogs.com/fwycmengsoft/p/4061989.html

关于前置类型声明的注意点:


代码一:

class B;

class A
{
public:
B* aData;
A(B* b) :aData(b) {}
};

class B {};

上述代码能够通过编译。


代码二:

class B;

class A
{
public:
B aData;
A(B b) :aData(b) {}
};

class B {};

上述代码报错。Error List:

C2079 'A::aData' uses undefined class 'B'

C2027 use of undefined type 'B'

C2439 ‘A::aData': member could not be initialized


问题总结:上述两段代码中仅仅相关了一个指针,而编译结果不同。

结论:前置类型声明只能作为指针或者引用,不能定义类的对象,所以也不能调用对象中的方法(包括构造函数)。