(C ++)(链接错误)模板成员函数的未解析外部

时间:2018-01-14 10:30:04

标签: c++ templates linker-errors

我有一个读取文件的类,并将在地图中找到的值存储在内存中。我使用模板声明了一个成员函数,这样我就可以从字符串中提取任何值。

ConfigReader.h

class ConfigReader
{
    private:
        More Code...
    public:
        ...
        template<typename vType>
        vType GetValue(const char * key);
};

ConfigReader.cpp

...

template<typename vType>
vType ConfigReader::GetValue(const char * key)
{
    stringstream buffer(GetStringValue(key));

    vType extrValue;
    buffer >> extrValue;

    if(!buffer)
        throw invalid_argument("Failed to extract the value!");

    return extrValue;
}

Main.cpp的

int main()
{
    ...

    try{
        cout << "Encryption: " << boolalpha << config.GetValue<bool>("use_enc") << endl;

    }catch(invalid_argument err){
        cerr << "Error: " << err.what() << endl;

    }
}

我收到以下链接错误: 1>Main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall ConfigReader::GetValue<bool>(char const *)" (??$GetValue@_N@ConfigReader@@QAE_NPBD@Z) referenced in function _main

1>..\Visual Studio 2017\Projects\...\Debug\FilePhraser.exe : fatal error LNK1120: 1 unresolved externals

这意味着找不到函数GetValue<bool>()

您能解释一下链接器无法找到该功能的原因吗?

1 个答案:

答案 0 :(得分:0)

因为您尚未实例化某个功能。 将vType ConfigReader::GetValue<bool>(const char * key);附加到ConfigReader.cpp,链接器将找到它。