我在 C++ 中创建一个 Vector2 类作为模板,我想将+
运算符定义为可以简单地添加两个向量的非成员友元函数。
这是我的 Vector2 模板类中的朋友声明:
template <class U>
friend Vector2<T> operator+(const Vector2<T> &lhs, const Vector2<T> &rhs);
这包含在一个.hpp
文件中,但实现在一个单独的.cpp
文件中:
template <class T>
Vector2<T> operator+(const Vector2<T> &lhs, const Vector2<T> &rhs)
{
return Vector2<T>(lhs.x_ + rhs.x_, lhs.y_ + rhs.y_);
}
这编译没有任何警告,但是,它似乎不起作用。
Vector2<int> v1(4, 3);
Vector2<int> v2(3, 4);
Vector2<int> v3 = v1 + v2;
当我尝试编译上面的代码片段时,GCC 抱怨:
prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:26:28: error: no match for ‘operator+’ in ‘v1 + v2’
source/vector2.hpp:31:23: note: template<class U> Vector2<int> operator+(const Vector2<int>&, const Vector2<int>&)
source/vector2.hpp:31:23: note: template argument deduction/substitution failed:
prog.cpp:26:28: note: couldn't deduce template parameter ‘U’
prog.cpp:26:18: warning: unused variable ‘v3’ [-Wunused-variable]
我究竟做错了什么?如何正确定义+
模板类的运算符?