gpt4 book ai didi

c++ - 模板方法的 undefined reference 错误

转载 作者:IT老高 更新时间:2023-10-28 14:00:39 25 4
gpt4 key购买 nike

在过去的一个半小时里,这一直让我发疯。我知道这是一件小事,但找不到问题所在(当然,周五下午下雨,这无济于事)。

我已经定义了以下类,它将保存从文件中读取的配置参数,并允许我从我的程序中访问它们:

class VAConfig {
friend std::ostream& operator<<( std::ostream& lhs, const VAConfig& rhs);

private:
VAConfig();
static std::string configFilename;
static VAConfig* pConfigInstance;
static TiXmlDocument* pXmlDoc;
std::map<std::string, std::string> valueHash;

public:
static VAConfig* getInstance();
static void setConfigFileName( std::string& filename ) { configFilename = filename; }
virtual ~VAConfig();

void readParameterSet( std::string parameterGroupName );
template<typename T> T readParameter( const std::string parameterName );
template<typename T> T convert( const std::string& value );
};

方法convert()VAConfig.cpp 中定义作为

template <typename T>
T VAConfig::convert( const std::string& value )
{
T t;
std::istringstream iss( value, std::istringstream::in );
iss >> t;
return t;
}

一切都很简单。但是当我使用

从我的主程序进行测试时
int y = parameters->convert<int>("5");

我收到了 undefined reference to 'int VAConfig::convert<int>...'编译错误。 readParameter() 同上.

查看了很多模板教程,但无法弄清楚这一点。有什么想法吗?

最佳答案

模板化的代码实现永远不应该在 .cpp 文件中:你的编译器必须在看到调用它们的代码的同时看到它们(除非你使用 explicit instantiation 来生成模板化的目标代码,但即使这样 .cpp 也是错误的文件类型)。

你需要做的是将实现移动到头文件,或者像 VAConfig.t.hpp 这样的文件,然后 #include "VAConfig.t.hpp " 每当您使用任何模板化成员函数时。

关于c++ - 模板方法的 undefined reference 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com