原先代码结构
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.youkuaiyun.com/feiyinzilgd/article/details/6263822

本文解析了C++中类向前申明引发的编译警告,并说明了`delete`操作中析构函数不可见的原因。通过实例展示了如何修正错误,强调了头文件包含对于类实体可见性的重要性。
3785

被折叠的 条评论
为什么被折叠?



