参考自: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
问题总结:上述两段代码中仅仅相关了一个指针,而编译结果不同。
结论:前置类型声明只能作为指针或者引用,不能定义类的对象,所以也不能调用对象中的方法(包括构造函数)。