2012-06-06 4 views
1

Я новичок в C++ и у меня проблема с этим кодом, который должен отображать результаты в финале Суперкубка: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 ++, я получаю сообщение об ошибке

error: invalid operands of types 'int' and 'const char [2]' to binary 'operator<<'

Если удалить константы и добавить их в перед каждым std::cout, то он работает нормально. Я просто хотел знать, почему я не могу добавить константы во время каждой выходной строки?

ответ

2

В сообщении об ошибке указано: int << char, что, конечно же, является нечетной операцией.

Это из-за приоритетов оператора.

Каждый оператор имеет приоритет, который будет оцениваться до или после оценки других операторов.

+ оценивает, прежде чем =

и << должны быть оценены после = была cout<<"stuff" была его первоначальная цель.

<< Первоначально оператор бит-сдвига (по-прежнему есть), поэтому вы испытываете это странное поведение. Добавьте круглые скобки, и все будет хорошо.

+0

Просто поместите в круглые скобки и теперь он работает, как я хотел, спасибо! Итак, чтобы уточнить, код выше не работает, потому что оператор сдвига бит вычисляется перед оператором =? Еще раз спасибо! – MadMonty

+0

Эй, ты понял. –

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"; 
+1

Или еще лучше: НАРУШАЙТЕ НА РАЗЛИЧНОЙ ЛИНИИ –

Смежные вопросы