为什么它不起作用?
错误 C2676 二进制“-”:“坐标”未定义此运算符或转换为内置运算符可接受的类型
#include <iostream>
template <typename T>
class coord
{
private :
T value;
public:
coord(T out_value = 0)
{
value = out_value;
}
auto operator-(const coord& outsider) -> decltype (this->value - outsider.value)
{
return (this->value - outsider.value);
}
};
int main()
{
coord<double> first(10);
coord<int> second(3.3);
std::cout << (first - second);
return 0;
}
由于您拥有
first
并且second
拥有不同的类型(模板使用不同的类型实例化),因此您不能使用仅为特定类型定义的二元运算符。为了使其适用于所有实例,此运算符还必须是模板运算符。为此,您必须将其设为value
公共成员,因为您需要从对象外部访问:在示例中,我使函数免费,但您可以在类中实现它。为此,您只需要保留
SecondValueType
模板参数。