1

私は C++ の初心者で、スーパーボウルの決勝戦でスコアを表示するはずのこのコードに問題があります。

#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";

次に << 演算子が実行されます。これは、`結果 << "\n\n" も意味します。しかし、この演算子は int と char[2] の間で定義されていません。

問題を解決するには、次のように代入操作を括弧で囲みます。

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