模板化方法中使用的嵌套类的未解析外部符号

Unresolved external symbol of nested class used in templated method

本文关键字:符号 外部 嵌套 方法      更新时间:2023-10-16

我在此类中遇到了一个奇怪的未解决的外部符号错误。我有一个基于 Qt 的C++库,其中LIBDATASHARED_EXPORT__declspec(dllexport)__declspec(dllimport)的别名。

class LIBDATASHARED_EXPORT SaveFile
{
class Index
{
public:
operator bool() const; //<--- defined in cpp
};
public:
template<typename T> load()
{
Index idx;
if(idx) //<--- complains about unresolved symbol...
{
}
}
};

当我在另一个与库链接的项目中使用它时,我在实例化模板方法时得到了有关SaveFile::Index::operator bool() constunresolved external symbol。当我将SaveFile::Index::operator bool() const的定义放在标题中时,它工作正常。SaveFile::Index::operator bool() const的定义确实与类的其余定义位于同一个.cpp文件中,因此应在实例化时定义。

这里有什么问题,我该如何解决?

问题是还必须导出内部类,因此在这种情况下的解决方案是将LIBDATASHARED_EXPORT添加到内部类中,因为它不是由外部类导出的(它本身是导出的)。使用依赖沃克发现。

相关文章: