原先代码结构
class a; 声明
class b
{
~b(){delete m_a;}
a* m_a;
}
class a {定义}
编译报 warning c4510 删除指向不完整的指针
一般是编译器没找到析构函数报警,因为之前只有声明。
修改:
class a {定义}
class b
{
~b(){delete m_a;}
a* m_a;
}
即可
出现原因:
class CXxx;这种方式向前申明,其后面的类只能申明其指针,前向申明以后的类无法看到其类实体。
所以,delete的时候,CXxx的析构函数对后面的类是透明不可见的,除非使用头文件包含。
转自:https://my.oschina.net/u/3013430/blog/801092
参考:https://blog.csdn.net/feiyinzilgd/article/details/6263822