Я создаю шаблон Vector<T,n>
struct и пытаюсь перегрузить некоторые арифметические c операции. Тем не менее, даже когда я перегрузил операторов, я не получаю ошибок совпадения. Код показан ниже.
В моем файле Vector.hpp
есть следующий код:
template <typename T, int n>
struct Vector
{
T data[n];
template <typename S>
Vector<T, n> operator+(Vector<S, n> &vec);
...
}
typedef Vector<int, 3> vec3i;
И в Vector.cpp
:
template <typename T, int n>
template <typename S>
Vector<T, n> Vector<T, n>::operator+(Vector<S, n> &vec)
{
T arr[n];
for (int i = 0; i < n; i++)
{
arr[i] = this->data[i] + (T)vec->data[i];
}
Vector<T, n> result(arr);
return result;
}
Однако, когда я вызвал этот оператор в main, он не скомпилируется:
int main(int argc, char const *argv[])
{
vec3i vec1 = Vec3i(1,2,3);
vec3i vec2 = Vec3i(4,5,6);
vec3i vec3 = vec1 + vec2;
std::cout << vec3.x << "," << vec3.y << "," << vec3.z <<"\n";
return 0;
}
Вот сообщение об ошибке:
no operator "+" matches these operands -- operand types are: vec3i + vec3i
no match for ‘operator+’ (operand types are ‘vec3i {aka Vector<int, 3>}’ and ‘vec3i {aka Vector<int, 3>}’)GCC
no match for ‘operator+’ (operand types are ‘vec3i {aka Vector<int, 3>}’ and ‘vec3i {aka Vector<int, 3>}’)GCC
Есть идеи о том, что я делаю неправильно?