在header中声明的ho是struct中的重载运算符吗?

时间:2017-07-09 16:15:20

标签: c++ struct header operator-overloading

我有一个运算符模板类型的结构。想要在标题中正确公布此结构。写下面的代码

标题文件

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);

无法理解我做错了什么?

1 个答案:

答案 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; 
 }