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

Unresolved external symbol of nested class used in templated method

提问人:Resurrection 提问时间:12/7/2016 最后编辑:Resurrection 更新时间:12/7/2016 访问量:538

问:

我在此类中遇到了一个奇怪的未解决的外部符号错误。我有一个基于 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...
        {

        }
    }
};

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

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

C++ Qt 模板 未解析 - 外部

评论

0赞 Resurrection 12/7/2016
在将问题标记为重复之前,您能否阅读该问题?这不是未在标头中定义模板方法的问题。它在标头中定义。类本身未模板化。内部类未模板化。封闭类的符号可以很好地解析,但内部类的符号无法解析,即使它是在同一个翻译单元和库中定义的。
0赞 Algirdas Preidžius 12/7/2016
首先,我阅读了这个问题,在我阅读了以下陈述后,您的问题就很明显了:当我将定义放在标题中时,它工作正常。
0赞 Resurrection 12/7/2016
@AlgirdasPreidžius 你是认真的吗?我显然是指 的定义,而不是模板。这一直在标题中定义。SaveFile::Index::operator bool() const
0赞 Miles Budnek 12/7/2016
我无法重现你的问题(至少一旦我公开你的问题)。请提供一个最小的可重现示例,以演示您看到的错误。operator bool
0赞 Resurrection 12/7/2016
@MilesBudnek 编辑了 OP,以包含最少的源代码来重现此内容。

答:

1赞 Resurrection 12/7/2016 #1

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