没有运算符匹配这些操作数

Posted

技术标签:

【中文标题】没有运算符匹配这些操作数【英文标题】:No operator matches these operands 【发布时间】:2013-12-10 14:39:53 【问题描述】:
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <array>
#include <vector>

using namespace std;

int _tmain()
  double x1 = 5.25;
  double y1 = 4.2345;
  int nx = 10;
  int ny = 11;
  vector<double> Bn(nx, ny);
  vector<float> x (nx);
  vector<float> y (ny);
  for (int i = 0; i <10; i++)
    for (float j = 0; j < 11; j++)
      Bn = exp((pow(x[nx]-x1,2)-pow(y[ny]-y1,2))
     
  
  system ("pause");
  return 0;

我得到“ c++”错误。 Bn 后的 '=' 高亮显示。我不确定我应该怎么做。这也是定义未知大小的数组的正确方法吗? 我希望能够定义一个数组,而不必定义数组中的内容。

问:如果我不定义数组的大小,那是否意味着编译器会随机选择任何数字或什么??

【问题讨论】:

exp 的结果分配给向量时会发生什么? 这不是制作二维数据结构的正确方法,如果这是您的意图。这是你的意图吗? 你会怎么写一个数据数组?我正在尝试制作二维数据结构。否则你会怎么做一个二维数据结构?? 【参考方案1】:

这里不止一个问题:

 for (int i = 0; i <10; i++)
    for (float j = 0; j < 11; j++)
      Bn = exp((pow(x[nx]-x1,2)-pow(y[ny]-y1,2))
     
  

你是:

double 分配给std::vector&lt;double&gt;。 迭代 ij 但不在循环中使用它们。 访问超出数组大小的元素。两次x[nx]y[ny]nx 用于定义x 的大小,nyy 的大小相同。 在Bn = exp((pow(x[nx]-x1,2)-pow(y[ny]-y1,2)) 行的末尾缺少;

所以至少使用迭代器来遍历你的向量并定义你想要存储exp的输出的位置。

顺便说一句,由于Bn被定义为没有大小,所以你必须使用Bn.push_back()来添加一个元素。

【讨论】:

Bn = exp((pow(x[nx]-x1,2)-pow(y[ny]-y1,2)) 无法编译 - 缺少 ; 和缺少 )【参考方案2】:

要填充std::vector,请使用函数push_back() 而不是赋值运算符。 受影响的行中还缺少);

可能您想在 pow() 函数中使用循环 indizes i &amp; j 而不是常量值 10 / 11。我几乎猜不到您要做什么,并想出了:

#include <iostream>
#include <cmath>
#include <array>
#include <vector>

using namespace std;

int _tmain()
  double x1 = 5.25;
  double y1 = 4.2345;
  int nx = 10;
  int ny = 11;
  vector<double> Bn(nx, ny);
  vector<float> x (nx);
  vector<float> y (ny);
  /* todo: fill x and y with values */
  for (int i = 0; i <nx; i++)
    for (float j = 0; j < ny; j++)
      Bn.push_back(exp((pow(x[i]-x1,2)-pow(y[j]-y1,2))));
     
  
  system ("pause");
  return 0;

【讨论】:

另外,我很确定 OP 并不是要使用 nx 类型为 double 的元素初始化向量 Bn,并为它们提供所有值 ny 我不确定,他想做什么......这是我能猜到的最接近的。 我做了一个 x 和 y 的数组,然后计算 Bn 以产生一个结果数组。这两个数组需要有一个未知的大小。 @user3087244 您想使用哪些值来初始化两个向量 x 和 y? 我希望初始化为零。

以上是关于没有运算符匹配这些操作数的主要内容,如果未能解决你的问题,请参考以下文章

没有运算符“=”匹配这些操作数错误

错误:没有运算符“<<”与这些操作数匹配

没有运算符 << 匹配这些操作数

错误:没有运算符“<<”与这些操作数匹配

对象向量 - C++。没有运算符“<<”与这些操作数匹配,错误

OpenCV 帮助 - 错误:没有运算符“=”匹配这些操作数。操作数类型为 cv::Mat = IplImage*