1

我是 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<<'

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

4

2 回答 2

2

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

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

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

+之前评估=

<<应在达到其最初目的后=进行评估。cout<<"stuff"

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

于 2012-06-06T22:20:54.603 回答
1

查看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";

然后执行 << 运算符,这也意味着 `result << "\n\n"。但是这个运算符没有定义在 int 和 char[2] 之间。

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

std::cout << " Patriots: " << (patriotsScore = patriotsScore + FIELD_GOAL + EXTRA_POINT)  << "\n\n";
于 2012-06-06T22:24:59.963 回答