如何解决此错误:二进制表达式的操作数无效('std::vector<double>' 和 'double')?
Posted
技术标签:
【中文标题】如何解决此错误:二进制表达式的操作数无效(\'std::vector<double>\' 和 \'double\')?【英文标题】:How can I fix this error: Invalid operands to binary expression ('std::vector<double>' and 'double')?如何解决此错误:二进制表达式的操作数无效('std::vector<double>' 和 'double')? 【发布时间】:2019-06-17 12:48:38 【问题描述】:我想获得一些陀螺仪读数的平均值,它涉及将 std::vector<double>
类型与 double 类型相除,但我收到以下错误报告
二进制表达式的无效操作数('std::vector' 和 'double')
我该如何解决这个问题?
double n_readings;
std::vector<double> gyro_reading;
for(int i = 0; i < n_readings; i++)
gyro_reading.push_back(gyro_z());
msleep(1);
double average = gyro_reading/n_readings;
【问题讨论】:
您不能将向量除以数字。要获得平均值,请将向量的元素相加,然后除以向量的大小。检查这个问题,看看如何做到这一点:***.com/questions/3221812/…double average = std::accumulate(std::begin(gyro_reading),std::end(gyro_reading), 0.0) / n_readings
。将需要 algorithm
标头。
std::valarray
直接支持成员操作,对于std::vector
,您必须使用循环或算法
为什么投反对票?这是一个完全有效的问题。 @Mansoor您应该发表您的评论作为答案,最好附上关于为什么 OPs 尝试不起作用的简短解释。
我是minimal reproducible examples 的绝对粉丝,但是来吧。 OPs 错误信息很清楚。即使这就是原因,我也看到 4 个反对票,但只有 1 个投票结束,因为它缺少 minimal reproducible example。 OP 应该如何以这种方式改进他们的问题。
【参考方案1】:
您对gyro_reading/n_readings
的调用需要在类型std::vector<T>
和T
之间定义/
运算符。标准向量没有这样的运算符。即使是这样,结果也可能是按元素除而不是求和然后除。
以下内容:
#include <iterator>
#include <numeric>
//...
double average = std::accumulate(std::begin(gyro_reading),std::end(gyro_reading), 0.0) / n_readings;
将累加所有元素gyro_reading
,默认使用operator+
进行缩减,然后除以n_readings
。此外,您可以使用gyro_reading.size()
而不是n_readings
,因为这将始终保持一致。
【讨论】:
sum 部分与std::accumulate(gyro_reading.begin(), gyro_reading.end(), 0.0)
有何不同?会导致同样的结果吗?
如果gyro_reading
是std::vector
,则没有区别。免费函数更通用,可以与 C 数组一起使用,请参阅 post。以上是关于如何解决此错误:二进制表达式的操作数无效('std::vector<double>' 和 'double')?的主要内容,如果未能解决你的问题,请参考以下文章
错误:二进制表达式的操作数无效('float' 和 'float')
C ++新手:从实现学习单独的接口并得到错误:VSCode中的二进制表达式的操作数无效