特殊的虚拟函数修复了未解析的外部符号

Peculiar Virual Function Fixes Unresolved External Symbol

我刚刚继承了一些遗留代码。调用问题方法的位置。我在底部有两个解决方案,但为什么使 problemMethod 虚拟工作...

OtherClass::someOtherMethod() {
    // problemMethod(Manager* manager, const ConfigClass* config)
    obj->problemMethod(man, conf); // conf is not const in this file which therefore does not match the params list.
}

现在在 obj .h 和 .cpp 中,方法的形式是(我检查了 cpp 和 h 是否都匹配)。

    problemMethod(Manager* manager, const ConfigClass* config);

当尝试构建它时,它在 OtherClass::SomeOtherMethod 中有一个未解决的外部问题,不知道问题方法在哪里。

两种解决方法:修改.h和.cpp中的problemMethod,去掉const。哪个工作,构建和运行。或者使 problemMethod 虚拟化。为什么让它虚拟工作?我的猜测是,因为它是虚拟的,所以它会延迟到运行时,这会防止链接器错误,然后它会在稍后解决......???关于链接器错误的令人困惑的部分是 visual studio 在该方法上按 F12 时确实找到它并知道它在哪里。

已解决:

问题在于,在 OtherClass.h 中,Config 在 class 中被前向声明为结构。它不会在 vs2010 中抱怨这一点,但会在 vs2017

中抱怨