Expected class-name before '{' token

Expected class-name before '{' token
KH
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 4 lata
  • Postów:4
0

Witam, mam problem ze znalezieniem błędu ( tzn. najpewniej brakuje mi wiedzy):

expected class-name before '{' token
Main w skrócie:(Main.cpp)

Kopiuj
#include<iostream>
#include "Postac.hpp" // Wynik błędu: in file included from Postac.hpp:3      from  Main.cpp // odnosi się do tej linii
using namespace std;
int main()
{
 Potwor smok;
int o;
cin>>o;
return 0;
}

Postac.hpp:

Kopiuj
#ifndef Postac_hpp
#define Postac_hpp
#include "Potwor.hpp"

class Postac
{
      protected:   
                   int pw;
      public:
                   int zmienna_pw;
                   
      };
#endif

Potwor.hpp:

Kopiuj
#ifndef Potwor_hpp
#define Potwor_hpp

class Potwor : public Postac
{                                        // W tej linijce błąd: Expected class-name before '{' token 
      
      };
#endif

Proszę o wytłumaczenie co jest źle i dlaczego.

edytowany 2x, ostatnio: flowCRANE
flowCRANE
Treści błędów wstawiaj w znaczniki &lt;code&gt;, dlatego że mogą zawierać znaki, które używane są w postach do formatowania treści;
0

Twoja metoda główna main () nie jest w żadnej klasie. A powinna być.

dokładnie o tym mówi komunikat błędu. Polecam na przyszłość poszukać czegoś w Google, bo za pomocą treści komunikatu. Będzie szybciej niż pisać na forum i czekać na odpowiedź.

_13th_Dragon
Że co? Czyżby nie odróżniasz C# od C++ ?
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
3

Twoja metoda główna main () nie jest w żadnej klasie. A powinna być.
Whaaat? Tożto wierutna bzdura.

Masz odwrotnie includy. w Potwor.hpp nie masz widocznej klasy Postac, a próbujesz po niej dziedziczyć. W momencie parsowania, dla kompilatora Postac nie jest nazwą klasy (class name), której oczekuje przed tokenem {.


0

1 zdanie jest nie ważne. Nie zauważyłem że to cpp. Idę spać zamiast gadać głupoty ;-)

Za to reszta o Google ciągle aktualna...

_13th_Dragon
Zgadza się, tylko kto by czytał ciąg dalszy postu po przeczytaniu "TAKIEJ HEREZJI"
KH
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 4 lata
  • Postów:4
0

Thx, chyba działa.
Zmienione:

  • main:#include "Postac.hpp" na #include "Potwor.hpp"
  • Potwor.hpp: dodane: #include "Postac.hpp"
  • Postac.hpp: odjęte: #include "Potwor.hpp"
    Podsumowywując:
    Czy dobrze zrozumiałem, że najpierw do maina należy zincludować wszystkie nagłówki znajdujące się na gałęziach drzewa ( od dziedziców nieposiadających innych dziedziców), a potem przesuwamy się w dół drzewa odnosząc w kolejności dziecko->rodzic?
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
2

Nie do końca.

W każdym miejscu powinieneś mieć wyłącznie nagłówki, których niezbędnie potrzebujesz (polecam przy okazji http://jonjagger.blogspot.co.uk/2013/04/the-include-test.html - wcale nie trzeba tak dużo nagłówków jak by się mogło wydawać). Nie więcej, nie mniej. Dzięki temu kolejność pojawiania się nagłówków nie będzie miała znaczenia (pomijając te definiujące makra, jak <windows.h>)

Jeśli w main.cpp korzystasz z Potwor - inkludujesz go. Jeśli nie - nie. W Potwor korzystasz z Postac - include musi się pojawić. itd.


edytowany 2x, ostatnio: kq
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 dni
2

Pokaż jak zrobiłeś.
Skoro piszesz: - "... najpierw do maina należy zincludować ..." -to źle zrozumiałeś.
Powinieneś zrobić to tak że nie ma znaczenia w jakiej kolejności co dodajesz.

Kopiuj
postac.hpp -> brak
postac.cpp -> #include "postac.hpp" // ewentualnie kiedy się pojawi ten plik cpp
potwor.hpp -> #include "postac.hpp"
potwor.cpp -> #include "potwor.hpp" // ewentualnie kiedy się pojawi ten plik cpp
maion.cpp -> #include "postac.hpp" #include "potwor.hpp" // w dowolnej kolejności

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
KH
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 4 lata
  • Postów:4
0

main:
#include "Potwor.hpp"
potwor:
#include "Postac.hpp"
postac:
nie includuje niczego
Teraz wydaje mi się, że rozumiem, wcześniej myślałem że dodaje się na odwrót, np przy dziedziczeniu: ( klasa po której się dziedziczy) postac-> #include "potwor.hpp" (klasa dziedzicząca), zasugerowałem się schematami przy opisach dziedziczenia.
Dobranoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.