C++ Неверные операнды в двоичном
Я новичок в 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]' для двоичного оператора '<<'
Если я уберу константы и добавлю их перед каждым std::cout
, тогда он работает нормально. Я просто хотел знать, почему я не могу добавить константы во время каждой строки вывода?
2 ответа
Ваше сообщение об ошибке гласит: int << char
что, конечно, странная операция.
Это из-за приоритетов оператора.
Каждый оператор имеет приоритет, то есть он будет оценивать до или после оценки других операторов.
+
оценивает раньше =
а также <<
следует оценивать после =
имел cout<<"stuff"
была его первоначальная цель.
<<
изначально является оператором сдвига битов (все еще есть), поэтому вы испытываете это странное поведение. Добавьте скобки, и все будет хорошо.
Проверьте 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";