我正在学习C ++中的模板。在MyClass.h中:
template <class valueType>
void valueToMap(const std::string key, const valueType value);
在MyClass.cpp中:
void MyClass::valueToMap(const std::string key, const valueType value) // error
^
{
_map[key] = std::to_string(value);
}
错误是:未知类型名称'valueType' 我已经包含了头文件,所以我做错了什么?
答案 0 :(得分:3)
它必须是一个模板
template <typename valueType>
void MyClass<valueType>::valueToMap(const std::string key, const valueType value) // error
^
{
_map[key] = std::to_string(value);
}
然而 请记住:
答案 1 :(得分:1)
您需要在声明和定义中重复模板:
template <class valueType>
void MyClass::valueToMap(const std::string key, const valueType value)
{
_map[key] = std::to_string(value);
}
答案 2 :(得分:1)
你应该添加
template <class valueType>
也在方法实施和更改之前
void MyClass:: ...
到
void MyClass<valueType>:: ...
答案 3 :(得分:1)
处理模板时,不能将类声明和类实现分成单独的文件(至少不包括.h文件末尾的.cpp文件)。这是由于模板的编译方式。
执行您要做的事情的最简单方法是内联您的函数:
template <class valueType> // assuming this is also at the class level
void valueToMap(const std::string key, const valueType value)
{
_map[key] = std::to_string(value);
}
或者将实现放在头文件中的类声明之后:
template<class valueType>
class MyClass
{
public:
void valueToMap(const std::string key, const valueType value);
};
template<class valueType>
void MyClass<valueType>::valueToMap(const std::string key, const valueType value)
{
_map[key] = std::to_string(value);
}