system
(system)
23 Wrzesień 2012 12:34
#1
Witam!
Od jakiegoś czasu grzebię w C++ i zapragnąłem napisać w konsoli prostą grę jaką jest O i X. Kod napisany i naglę IDE wypluwa błąd:
C:\Documents and Settings\Miki\Pulpit\cpp\tictactoe.cpp|64|error: no match for ‘operator==’ in ‘std::operator== [with _CharT = char](((const std::basic_string, std::allocator >&)((const std::basic_string, std::allocator >*)(& string[1]))), ((const std::basic_string, std::allocator >&)((const std::basic_string, std::allocator >*)(& string[2])))) == string[3]’|
Używam Code::Blocks z minigw na windowsie.
Fragment kodu, którego dotyczy błąd:
if (string[1] == string[2] == string[3] == "O")
{
a=0;
std::cout<<"Człowiek zwyciężył!";
}
Wybaczcie jeżeli gdzieś popełniłem czeski błąd, ale mózg mam tak zlasowany wszelakim debugowaniem, że mogło mi się coś przemknąć.
nr47
(Sawyer47)
23 Wrzesień 2012 12:40
#2
W C++ coś takiego należy zapisać jako koniunkcję pojedynczych porównań: A == B && A == C && …
Rolek0
(Rolek0)
23 Wrzesień 2012 14:40
#3
W C++ nie można robić złożonych porównań. Z porównania string[1] == string[2] wychodzi wartość logiczna prawda/fałsz (true/false), która nie moze być porównana ze string[3] .
Powinieneś zrobić w ten sposób
if(string[1] == "O" && string[2] == "O" && string[3] == "O")
Przy czym string jest tablicą stringów (trochę niefortunnie dobrałeś nazwę, ale niech ci będzie), jednak dla kólka i krzyżyka lepiej po prostu użyć tablicy znaków, bo i tak będziesz przechowywał w każdym polu jeden znak (mam rację?).
Podstawy C++ http://darkcult.nazwa.pl/wiki/index.php/C%2B%2B
Dłuższy tutorial http://xion.org.pl/productions/texts/coding/megatutorial/
Polecam również http://www.youtube.com/user/GynvaelColdwind/videos?view=1 ogólnie o programowaniu i innych rzeczach.
Miłej zabawy
system
(system)
23 Wrzesień 2012 15:37
#4
Dzięki za odpowiedzi!
Programuje w C++(i w ogóle) od całkiem niedawna, więc nie czytałem jeszcze dokumentacji, tylko kursy. Dzięki za linki i wytłumaczenie w czym rzecz.