如何解决错误
不添加标题。例如。
class COldStuff;
class CSomething
{
...
CAnother<COldStuff> m_test;
}
我正在为所有这些使用遗留代码(即
COldStuff
,CAnother
,CSomething
)。当我添加头文件修复c4150时,遇到了循环依赖性,尤其是重新定义问题。我还能如何解决这个问题?如果无法关闭将警告视为错误,或者忽略此错误或更改旧版代码...。我可以以某种方式让编译器知道COldStuff
的析构函数还是COldStuff
确实具有析构函数? 最佳答案
潜在修复程序:在源文件中明确定义CSomething
的析构函数(即使只是空的)。
为什么可能可行:从评论和Rup的一个很好的问题开始,我认为CAnother
试图删除COldStuff
,此时必须使其可见。现在,如果您没有为CSomething
明确定义析构函数,那么该部分也将内联实例化(基本上在 header 中,这会给您错误)。但是,如果您在CSomething
的cpp文件中显式定义了一个析构函数,则隐式CAnother<COldStuff>::~CAnother
在那里被实例化,您可以解析循环依赖关系。