【问题标题】:Using operator ^ with `double` operands emits compiler error将运算符 ^ 与 `double` 操作数一起使用会产生编译器错误
【发布时间】: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 不,代码对我来说看起来不错,但平方根函数给我带来了压力
  • 您只是发布了您的代码并询问为什么它无法编译。对于 StackOverflow,这不是一个合适的问题。

标签: c++


【解决方案1】:
  1. 你不能在 C++ 中获得这样的权力

    • 对数学 x 使用 std::pow()x*x2
  2. 对于多个输入,cin &gt;&gt; x1 &gt;&gt; x2 ...etc

  3. 在你的 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。纯净无副作用。
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2013-06-07
  • 2012-01-09
  • 1970-01-01
  • 2019-04-06
  • 2015-07-28
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多