模板化方法中使用的嵌套 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() constunresolved external symbol。当我将 SaveFile::Index::operator bool() const 的定义放在 header 中时,它工作正常。 SaveFile::Index::operator bool() const 的定义确实与 class 的其余部分定义在同一个 .cpp 文件中,因此它应该在实例化时定义。

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

问题是还必须导出内部 classes,因此在这种情况下的解决方案是将 LIBDATASHARED_EXPORT 添加到内部 class,因为它不是由外部 class 导出(它本身被导出)。使用 Dependency Walker 发现。