我有一个运算符模板类型的结构。想要在标题中正确公布此结构。写下面的代码
标题文件
struct add_positive {
template<typename T>
T operator()(T value, const T& now);
};
.cpp文件
template<typename T>
add_positive add_positive::operator()(T value, const T& now) {
if (now >= 0) {
return value + now;
}
return value;
}
但是在编译时会出现以下错误:
error: prototype for ‘add_positive add_positive::operator()(T, const T&)’ does not match any in class ‘add_positive’
add_positive add_positive::operator()(T value, const T& now) {
error: candidate is: template<class T> T add_positive::operator()(T, const T&)
T operator()(T value, const T& now);
无法理解我做错了什么?
答案 0 :(得分:1)
您可以简单地使用内联定义:
struct add_positive {
template<typename T>
T operator()(T value, const T& now) {
if (now >= 0) {
return value + now;
}
return value;
}
};
请注意,您通常必须提供definition for your templated function in the header file。
在标题中,以下内容同样有效:
struct add_positive {
template<typename T>
T operator()(T value, const T& now);
};
template<typename T>
T add_positive::operator()(T value, const T& now) {
if (now >= 0) {
return value + now;
}
return value;
}