我有一个读取文件的类,并将在地图中找到的值存储在内存中。我使用模板声明了一个成员函数,这样我就可以从字符串中提取任何值。
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>()
。
您能解释一下链接器无法找到该功能的原因吗?
答案 0 :(得分:0)
因为您尚未实例化某个功能。
将vType ConfigReader::GetValue<bool>(const char * key);
附加到ConfigReader.cpp
,链接器将找到它。