没有运算符匹配这些操作数
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<double>
。
迭代 i
和 j
但不在循环中使用它们。
访问超出数组大小的元素。两次x[nx]
和y[ny]
而nx
用于定义x
的大小,ny
和y
的大小相同。
在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 & 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?
我希望初始化为零。以上是关于没有运算符匹配这些操作数的主要内容,如果未能解决你的问题,请参考以下文章