将运算符 ^ 与 `double` 操作数一起使用会产生编译器错误
Posted
技术标签:
【中文标题】将运算符 ^ 与 `double` 操作数一起使用会产生编译器错误【英文标题】:Using operator ^ with `double` operands emits compiler error 【发布时间】:2012-10-09 17:17:45 【问题描述】:我想出了一些代码,但它无法编译。
错误 1 错误 C2296:“^”:非法,左操作数的类型为“双” 2 IntelliSense:表达式必须有整数或枚举类型
我能想出的代码如下:
#include<iostream>
#include<cmath>
using namespace std;
void getnumbers();
void showmean();
void showdev();
double x1, x2, x3, mean, dev;
void getnumbers()
cout<<"Please enter three numbers\n";
cin>>x1,x2,x3;
void showmean()
mean=(x1+x2+x3)/3;
cout<<"The mean of"<<x1<<", "<<x2<<", "<<x3<<" is "<<mean<<endl;
void showdev()
dev=sqrt((x1 - mean)^2) + (x2 - mean)^2 + (x3 - mean)^2/3;
cout<<"The standard deviation of"<<x1<<", "<<x2<<", "<<x3<<" is "<<dev<<endl;
int main()
getnumbers();
showmean();
showdev();
system("pause");
return 0;
【问题讨论】:
(我认为你的 cin 语法是错误的,但我可能是错的,因为我不知道你在问什么) @Collin 代码不执行。 Visual Studio 2010 的错误列表中的错误列在问题的顶部。现已编辑 我想他想知道为什么 C++ 中的按位 XOR 运算符不能用作指数运算符。肯定会编译的。但是.... @WhozCraig 不,代码对我来说看起来不错,但平方根函数给我带来了压力 您只是发布了您的代码并询问为什么它无法编译。对于 ***,这不是一个合适的问题。 【参考方案1】:你不能在 C++ 中获得这样的权力
对数学 x 使用std::pow()
或 x*x
2
对于多个输入,cin >> x1 >> x2 ...etc
在你的 SD 方程中,我认为你的近括号在数学上是错误的。
应该是SD = sqrt( (x*x + y*y) / z )
。你的关闭括号使它成为 x + y*y/3 (或 y2/3,忘记优先级)
【讨论】:
谢谢。现在让我试试这个。【参考方案2】:除了用于平方值的不正确的运算符和缺少括号外,给定的程序不满足指定函数应该返回计算值的部分。例如:
double calculate_mean()
return (x1+x2+x3)/3;
【讨论】:
+1 很好,这也应该在您的程序中进行更改,并且需要对整个程序进行一些重写,除非您只是为了完成任务而完成任务。 意思是说,我应该有单独的函数来计算和显示平均值,然后呢? @AK4749 我愿意从头开始重写整个东西,如果这意味着我可以做对,理解概念并获得满分。 这取决于你。分配不需要任何一种方式。一般而言,最好将计算与表示代码分开,并尽可能使函数表现得像数学函数。 IE。纯净无副作用。以上是关于将运算符 ^ 与 `double` 操作数一起使用会产生编译器错误的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 Rx“使用”运算符与 IAsyncDisposable 一起使用?