将运算符 ^ 与 `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*x2

    对于多个输入,cin &gt;&gt; x1 &gt;&gt; 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` 操作数一起使用会产生编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

将 IF 条件与存储在变量中的比较运算符一起使用

请问double型可以强制转换成int型吗?

是否可以将 Rx“使用”运算符与 IAsyncDisposable 一起使用?

是否可以将 Rx“使用”运算符与 IAsyncDisposable 一起使用?

如何将扩展运算符与“this”一起使用?

为啥我不能将接口与显式运算符一起使用? [复制]