如何解决错误



不添加标题。例如。

class COldStuff;

class CSomething
{
     ...
     CAnother<COldStuff> m_test;
}

我正在为所有这些使用遗留代码(即COldStuffCAnotherCSomething)。当我添加头文件修复c4150时,遇到了循环依赖性,尤其是重新定义问题。我还能如何解决这个问题?如果无法关闭将警告视为错误,或者忽略此错误或更改旧版代码...。我可以以某种方式让编译器知道COldStuff的析构函数还是COldStuff确实具有析构函数?

最佳答案

潜在修复程序:在源文件中明确定义CSomething的析构函数(即使只是空的)。

为什么可能可行:从评论和Rup的一个很好的问题开始,我认为CAnother试图删除COldStuff,此时必须使其可见。现在,如果您没有为CSomething明确定义析构函数,那么该部分也将内联实例化(基本上在 header 中,这会给您错误)。但是,如果您在CSomething的cpp文件中显式定义了一个析构函数,则隐式CAnother<COldStuff>::~CAnother在那里被实例化,您可以解析循环依赖关系。

09-08 09:35