【问题标题】:C++ Invalid operands to binaryC ++二进制操作数无效
【发布时间】:2012-06-06 22:14:32
【问题描述】:

我是 C++ 的初学者,我遇到了这段代码的问题,它应该在 Superbowl 决赛期间显示分数:

#include <iostream>

enum POINTS { EXTRA_POINT = 1, SAFETY = 2, FIELD_GOAL = 3, TOUCHDOWN =6 };

unsigned short giantsScore = 0, patriotsScore = 0;

int main()
{
std::cout << " Giants: " << giantsScore << "\n";
std::cout << " Patriots: " << patriotsScore << "\n\n";

std::cout << " Giants: " << giantsScore = giantsScore + SAFETY << "\n";
std::cout << " Patriots: " << patriotsScore << "\n\n"; 

std::cout << " Giants: " << giantsScore = giantsScore + TOUCHDOWN + EXTRA_POINT << "\n";
std::cout << " Patriots: " << patriotsScore << "\n\n";

std::cout << " Giants: " << giantsScore << "\n";
std::cout << " Patriots: " << patriotsScore = patriotsScore + FIELD_GOAL << "\n\n";

std::cout << " Giants: " << giantsScore << "\n";
std::cout << " Patriots: " << patriotsScore = patriotsScore + TOUCHDOWN + EXTRA_POINT << "\n\n";

std::cout << " Giants: " << giantsScore << "\n";
std::cout << " Patriots: " << patriotsScore = patriotsScore + TOUCHDOWN + EXTRA_POINT  << "\n\n";

std::cout << " Giants: " << giantsScore = giantsScore + FIELD_GOAL << "\n";
std::cout << " Patriots: " << patriotsScore << "\n\n";

std::cout << " Giants: " <<  giantsScore = giantsScore + FIELD_GOAL << "\n";
std::cout << " Patriots: " << patriotsScore << "\n\n";

std::cout << " Giants: " << giantsScore << "\n";
std::cout << " Patriots: " << patriotsScore = patriotsScore + FIELD_GOAL + EXTRA_POINT  << "\n\n";

return 0;
}

忽略这很不优雅,当我通过编译器 G++ 运行它时,我收到错误消息

错误:'int'和'const char [2]'类型的无效操作数到二进制'operator

如果我删除常量并将它们添加到每个std::cout 之前,那么它运行良好。我只是想知道为什么我不能在每个输出行中添加常量?

【问题讨论】:

    标签: c++ operands


    【解决方案1】:

    您的错误消息指出:int &lt;&lt; char,这当然是一个奇怪的操作。

    这是因为运营商的优先级。

    每个运算符都有一个优先级,这意味着它将在评估其他运算符之前或之后进行评估。

    += 之前计算

    并且&lt;&lt; 应该在= 具有cout&lt;&lt;"stuff" 的原始目的之后进行评估。

    &lt;&lt; 最初是位移运算符(现在仍然是),所以这就是您遇到这种奇怪行为的原因。添加括号,你会很好。

    【讨论】:

    • 只要把括号放进去,它现在就可以像我想要的那样工作了,谢谢!所以只是为了澄清一下,上面的代码不起作用,因为位移运算符是在 = 运算符之前评估的?再次感谢!
    【解决方案2】:

    查看http://cs.smu.ca/~porter/csc/ref/cpp_operators.html 了解运算符优先级规则的概述。当你写这个时:

    std::cout << " Patriots: " << patriotsScore = patriotsScore + FIELD_GOAL + EXTRA_POINT  << "\n\n";
    

    那么根据优先级规则,+操作符会先被执行,给你这个:

    std::cout << " Patriots: " << patriotsScore = result  << "\n\n";
    

    然后执行

    要解决您的问题,请在赋值操作周围加上括号,如下所示:

    std::cout << " Patriots: " << (patriotsScore = patriotsScore + FIELD_GOAL + EXTRA_POINT)  << "\n\n";
    

    【讨论】:

    • 或者更好:放在不同的行
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多