特殊的虚拟函数修复了未解析的外部符号
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
中抱怨
我刚刚继承了一些遗留代码。调用问题方法的位置。我在底部有两个解决方案,但为什么使 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
中抱怨