模板化方法中使用的嵌套 class 的未解析外部符号
Unresolved external symbol of nested class used in templated method
我 运行 遇到了一个奇怪的未解决的外部符号错误 class。我有一个基于 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...
{
}
}
};
当我在另一个项目中使用它 link 和库时,我在实例化模板方法时得到了关于 SaveFile::Index::operator bool() const
的 unresolved external symbol
。当我将 SaveFile::Index::operator bool() const
的定义放在 header 中时,它工作正常。 SaveFile::Index::operator bool() const
的定义确实与 class 的其余部分定义在同一个 .cpp 文件中,因此它应该在实例化时定义。
这是什么问题,我该如何解决?
问题是还必须导出内部 classes,因此在这种情况下的解决方案是将 LIBDATASHARED_EXPORT
添加到内部 class,因为它不是由外部 class 导出(它本身被导出)。使用 Dependency Walker 发现。
我 运行 遇到了一个奇怪的未解决的外部符号错误 class。我有一个基于 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...
{
}
}
};
当我在另一个项目中使用它 link 和库时,我在实例化模板方法时得到了关于 SaveFile::Index::operator bool() const
的 unresolved external symbol
。当我将 SaveFile::Index::operator bool() const
的定义放在 header 中时,它工作正常。 SaveFile::Index::operator bool() const
的定义确实与 class 的其余部分定义在同一个 .cpp 文件中,因此它应该在实例化时定义。
这是什么问题,我该如何解决?
问题是还必须导出内部 classes,因此在这种情况下的解决方案是将 LIBDATASHARED_EXPORT
添加到内部 class,因为它不是由外部 class 导出(它本身被导出)。使用 Dependency Walker 发现。