Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运算符+;=应用于std::valarray<;int*>;_C++_Pointers_Operator Keyword_Valarray - Fatal编程技术网

C++ 运算符+;=应用于std::valarray<;int*>;

C++ 运算符+;=应用于std::valarray<;int*>;,c++,pointers,operator-keyword,valarray,C++,Pointers,Operator Keyword,Valarray,以下是一个例子: #include <iostream> #include <string> #include <valarray> int main() { std::valarray<std::string> vs(2); // vs[0] += "hello"; // works // vs[1] += "hello"; // works vs += "

以下是一个例子:

    #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;
    }
#包括
#包括
#包括
int main()
{
标准:valarray vs(2);
//vs[0]+=“你好”;//有效
//vs[1]+=“你好”;//有效
vs+=“你好”;//有效

STD::CUT> P>我在C++中最后一次涉猎已经有一段时间了,请在术语/细节方面原谅任何小错。 您的错误归结为valarray上的
+=
试图对valarray的每个元素执行操作。默认情况下(如果我的内存没有欺骗我的话),对于存储在valarray中的整数指针没有
+
操作。您需要首先为整数指针指定一个重写的
+
运算符

另外,为了解释为什么其他操作工作而
vi+=1
不工作:

vi[0]+=1;//有效
vi[1]+=1;//有效
这些是有效的,因为(我不知道这是否是您打算做的)您已经在这些vararray字段中放置了整数(
newint(n)
将创建一个值为n的int),每个值为2。因此vi[0]是2,vi[0]也是2。您还可以编写

vi[0]=2;
vi[1]=2;
我假设您试图在
vi[0]
/
vi[1]
中存储一个整数数组,这将是

vi[0]=新整数[2];
vi[1]=新整数[2];
问题是,
vi[0][0]=0
,等等……如果这些字段不存在,只需提示valarray创建这些字段,当然了


<代码> STD::CUT

我在C++中的最后一个涉猎已经有一段时间了,所以请原谅术语中的任何细节或细节。

您的错误归结为valarray上的
+=
试图对valarray的每个元素执行操作。默认情况下(如果我的内存没有欺骗我的话),对于存储在valarray中的整数指针没有
+
操作。您需要首先为整数指针指定一个重写的
+
运算符

另外,为了解释为什么其他操作工作而
vi+=1
不工作:

vi[0]+=1;//有效
vi[1]+=1;//有效
这些是有效的,因为(我不知道这是否是您打算做的)您已经在这些vararray字段中放置了整数(
newint(n)
将创建一个值为n的int),每个值为2。因此vi[0]是2,vi[0]也是2。您还可以编写

vi[0]=2;
vi[1]=2;
我假设您试图在
vi[0]
/
vi[1]
中存储一个整数数组,这将是

vi[0]=新整数[2];
vi[1]=新整数[2];
问题是,
vi[0][0]=0
,等等……如果这些字段不存在,只需提示valarray创建这些字段,当然了


std::cout您可以看到
valarray
operator+
重载。正如您所看到的,没有重载适用于您尝试执行的操作(添加
int
和指针)。

您可以看到
操作符+
重载适用于
valarray
。正如您所看到的,没有重载适用于您尝试执行的操作(添加一个
int
和一个指针)。

std::valarray
对异构二进制操作没有重载,但对其他函数有一个全面的功能


std::valarray
对于异构二进制操作没有重载,但是对于其他函数,它有一个包罗万象的功能


为什么您要使用一个已经动态分配元素的容器,并将动态分配的元素放在其中?这有什么可能的用途?我认为需要更多关于您正在尝试做什么的上下文,而不仅仅是您当前尝试如何做的上下文。不将
int*
存储在
std::valarray
”和d中如何o您真的想手动更改指针地址吗?这绝不是一个好主意。@underline_d和@Darkproduct:这只是一个简化的示例。我的目的是利用
std::valarray
同时增加多个指针。您的程序有未定义的行为。
new int(2);
动态分配一个
int
值为
2
,而不是2
int
s@Caleth好的,对不起,我想写
newint[2]
为什么您要使用一个已经动态分配元素的容器,并将动态分配的元素放在其中?这可能有什么用途?我认为需要更多关于您尝试做什么的上下文,而不仅仅是您当前尝试如何做的上下文。不将
int*
存储在
std::valarray
?你真的想手动更改指针地址吗?这绝对不是一个好主意。@underline_d和@Darkproduct:这只是一个简单的例子。我的意图是利用
std::valarray
来“同时”增加多个指针。你的程序有未定义的行为。
new int(2);
动态分配一个
int
值为
2
,而不是2
int
s@Caleth好的,对不起,我想写
newint[2]
由于运算符
+=
int*
有效,我一直在寻找使用此运算符的方法。由于运算符
+=
int*
有效,我一直在寻找使用此运算符的方法。是的,这就是我寻找“类型”的原因哪一个适合递增
int*
。这可能吗?此外,来自操作
+=1
int
以标准方式适当转换为递增指针。@bou您可以创建自己的重载并让它做任何您想做的事情。除此之外,您什么都不能做。是的,这就是为什么我是lo查找一个适合于递增
int*
的“类型”。这可能吗?此外,来自操作
+=1的
int
vi.apply([](int * p){ return p + 1; });