【发布时间】:2021-08-18 18:29:24
【问题描述】:
对于学校的 C++ 练习,我需要重载 + 运算符来连接 2 个数组。我需要在一个泛型类中做到这一点。
例如:
a1 = {1, 3, 4}
a2 = {2, 3, 5, 6}
=> a = {1, 3, 4, 2, 3, 5, 6}
我有这段代码,但它不起作用。
#include <iostream>
#include <array>
using namespace std;
template <class T>
T operator+(const T& a1, const T& a2)
{
T a;
for (typename T::size_type i = 0; i < a1.size() + a2.size; i++) {
if (i < a1.size()) {
a[i] = a1[i];
} else {
a[i] = a2[i];
}
}
return a;
}
int main()
{
array<int,3> a1 = { 1, 3, 4 };
array<int,4> a2 = { 2, 3, 5, 6 };
array<int,7> a3 = a1 + a2;
for (int i = 0; i < 5; i++)
cout << a1[i] << '+' << a2[i] << '=' << a3[i] << ' ';
cout << endl;
return 0;
}
此代码不起作用,这是我在控制台中收到的:
main.cpp:32:24: error: no match for ‘operator+’ (operand types are ‘std::array’ and ‘std::array’)
array<int,7> a3 = a1 + a2;
~~~^~~~
main.cpp:15:3: note: candidate: template T operator+(const T&, const T&)
T operator+(const T& a1, const T& a2)
我应该怎么做才能解决这个问题?还有一个问题,这段代码是否使用泛型类?任何反馈将不胜感激!
【问题讨论】:
-
T operator+(const T& a1, const T& a2)都是一样的Ts,但是array<int,3>、<array<int,4>和array<int,4>是不同的类型 -
是的,你的 operator+ 说你可以将一个类型添加到相同的类型并获得相同的类型,但这不是你在 main 函数中尝试做的。
-
我是一名 Java 开发人员 -- 这与您所问的 C++ 问题是否相关?您是否试图让 C++ 代码看起来像 Java?
-
main 的部分看起来像你想要的元素
+但实施看起来像你想要连接。你到底想要什么? -
我需要在泛型类中这样做。 -- 我没有看到泛型类。我看到了一个独立的模板函数。
标签: c++ arrays templates operator-overloading operators