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

时间:2016-12-06 20:45:47

标签: c++ qt templates unresolved-external

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

        }
    }
};

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

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

1 个答案:

答案 0 :(得分:0)

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