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";
Другие вопросы по тегам