Illegal else without matching if C++

Czytałem dużo wątków, lecz nie znalazłem odpowiedzi. Proszę o wytłumaczenie jak mam poprawić kod.

[...]

		case 4:

			if (nKasa < 60000)

			cout << "Kupiles Ferrari 550 Maranello z rocznika 1996. Twoja kasa: " << nKasa - 60000 <
			else

			cout << "Nie masz tyle kasy!"; break;

[..]

Błąd występuje w linijce 2 od dołu.

Usunąć pierwsze break;, bo ono oznacza zakończenie wszystkich instrukcji w danej etykiecie case, czyli po nim spodziewane jest następne case, default albo koniec switch’a.

[...]

      case 4:

         if (nKasa < 60000)

         cout << "Kupiles Ferrari 550 Maranello z rocznika 1996. Twoja kasa: " << nKasa - 60000 <
         else

         cout << "Nie masz tyle kasy!";

         break;

[..]

Tak będzie dobrze:P

tak nie do końca:) bo if po prostu tyczy się tylko instrukcji do pierwszego średnika lub do bloku { } którego się dotyczy.

Dzięki :stuck_out_tongue: Właśnie się zdziwiłem, bo nie umieściłem po warunku średnika, a coś nie grało.

PS: Siema Quentin po kilku latach na tamtym starym forum, gdzie byliśmy adminami.

Tak też można powiedzieć :slight_smile:

Dobrze skoro już mam temat to jeszcze napiszę jeden problem.

http://wklej.org/id/280139/

Tu jest mój source zresztą niedopracowanej pseudo-gry (to taki mój trening). Gdy chcę skompilować, pokazuje błąd:

1>d:\gry\staragadkaracing\gra.cpp(183) : fatal error C1075: end of file found before the left brace '{' at 'd:\gry\staragadkaracing\gra.cpp(25)' was matched

Może nie widać na listingu /\ linijki nr. 183 ale ta linijka nie zawiera żadnego textu. Myślałem że źle są klamry powstawiane, ale liczyłem i jest ok. Może źle liczyłem ;pp. I jeszcze pokazuje mi ostrzeżenie:

1>d:\gry\staragadkaracing\gra.cpp(175) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data

1)

Brakuje Ci dwóch klamer na końcu pliku (tak formatujesz kod, że głowa boli ^.^). Linia 26: nie trzeba umieszczać lokalnego bloku po case

2)

fP = fP-0.3; [/code]

zamień na:

[code=php]fP = fP-0.3F; 

Dzięki temu stała dosłowna 0.3 nie jest typu double, ale od razu float.


Poza tym nie używaj przestarzałej biblioteki i plików bibliotek z rozszerzeniem .h, ponieważ one są wzięte z C. C++ definiuje nowe ich wersje w plikach nagłówkowych bez tego rozszerzenia (na początku trzeba umieścić jeszcze dodatkowo literkę ‘c’):

#include  [/code]

Jeszcze jeden błąd: error C2061: syntax error : identifier ‘nMoment’ )line6(

Widać że bład jest przy deklaracji funkcji:

int text(int nDocisk, nMoment, nMax, nZawiecha, nWybor, nKasa=5000, nWyborauta, nCar=0, nKm, nPoj, nWaga, nP); {{

I wywołanie w funkcji Main():

text(nMomentobrotow, nMa, nDocis, nZawiech, nWybo, nKas=5000, nWyboraut, nCa=0, nK, nPo, nWag, nPr);

Jeszce ten błąd: error C2447: ‘{’ : missing function header (old-style formal list?)

Przy deklaracji funkcji musisz przy każdym parametrze podać typ:

int text(int nDocisk, int nMoment, int nMax, …

Parametry domyślne możesz zastosować tylko przy kilku ostatnich:

int text(int nDocisk,int nMoment,int nMax,int nZawiecha,int nWybor,int nWyborauta,int nKm,int nPoj,int nWaga,int nP,int nKasa=5000,int nCar=0) …

wtedy przy wywołaniu nie musisz podawać wartości tych domyślnych parametrów o ile mają domyślne wartości:

text(nMomentobrotow, nMa, nDocis, nZawiech, nWybo, nWyboraut, nK, nPo, nWag, nPr) …

Okej a problem error C2447? Poprawiłem ale jeszcze on sie pojawia.

Pokaż wiersz przed tym błędem, wiersz w którym występuje ten błąd oraz wiersz po.

Komunikat informuje o tym że pomiędzy nagłówkiem funkcji a jej ciałem masz jakieś śmieci.

using namespace std;

int text(int nDocisk, int nMoment, int Max, int nZawiecha, int nWybor, int nWyborauta, int nKm, int nPoj, int nP, int nWaga, int nKasa=5000, int nCar=0); {{

	std::string strPlayer;

StrPlayer to po prostu zmienna z nazwą gracza.

Wywal średnik i jeden z nawiasów klamrowych, pewnie odpowiedni zamykający tez.

Ok, już nie mam błędów, tylko jak program przejdzie program do switch w int main() to wywala na sam koniec kodu ;/. Listing już podałem na górze.

Ten który się nie kompiluje? I mamy zgadywać co zmieniłeś?

http://wklej.org/id/281370/

Musisz “zapętlić” fragment kodu, użyj instrukcji while.

Może zacznij od czegoś prostszego, ponieważ masz w tym kodzie od groma błędów logicznych.

Bledy logiczne? Co to znaczy? Źle formatowany kod, nieestytyczny / niepraktyczny kod? :smiley:

Na przykład, przekazana do funkcji zmienna i w niej zmieniona po powrocie ma taką wartość jak miała.

Masz tyle takich błędów że nie ma sensu nawet wszystkie wymieniać.