这里是示例:
#include <iostream>
#include <string>
#include <valarray>
int main()
{
std::valarray<std::string> vs(2);
// vs[0] += "hello"; // works
// vs[1] += "hello"; // works
vs += "hello"; // works
std::cout << vs[0] << std::endl;
std::cout << vs[1] << std::endl;
std::valarray<int*> vi(2);
vi[0] = new int(2);
vi[0][0] = 0;
vi[0][1] = 1;
vi[1] = new int(2);
vi[1][0] = 2;
vi[1][1] = 3;
std::cout << vi[0][0] << std::endl;
std::cout << vi[1][0] << std::endl;
// vi[0] += 1; // works
// vi[1] += 1; // works
vi += 1; // error: invalid operands of types 'int*' and 'int*' to binary 'operator+'
std::cout << vi[0][0] << std::endl;
std::cout << vi[1][0] << std::endl;
}
[我不明白这个错误,如果有人可以向我解释。
是否有解决方法?
最诚挚的问候,
我最后一次涉猎C ++已经有一段时间了,所以请您在术语/细节方面有所疏漏。
您的错误归结为,valarray上的+=
尝试对valarray的每个元素执行操作。并且默认情况下(如果我的记忆不欺骗我),整数指针没有+
操作,该指针存储在valarray中。您需要先为int指针指定一个重写的+
运算符。
此外,为解释为什么其他操作起作用而vi += 1
无法起作用:
vi[0] += 1; // works
vi[1] += 1; // works
这些工作,因为(而且我不知道这是否是您要执行的操作)您已将整数放置在这些vararray字段中(new int(n)
将创建一个值为n的整数),每个整数的值为2.因此,vi [0]为2,vi [0]也是如此。你也可以写
vi[0] = 2;
vi[1] = 2;
我假设您正试图将一个整数数组存储在vi[0]
/ vi[1]
中,这本来应该是
vi[0] = new int[2];
vi[1] = new int[2];
问题是per documentation,vi[0][0] = 0
等……如果它们不存在,只需提示valarray创建这些字段,所以当然
std::cout << vi[0][0] << std::endl;
std::cout << vi[1][0] << std::endl;
将起作用。
您可以看到operator+
valarray
的here重载。如您所见,没有重载适合您要尝试执行的操作(添加int
和指针)。