Problem z klasami?
Ostatnio zmodyfikowano 2008-08-13 16:13
lynx Temat założony przez niniejszego użytkownika |
Problem z klasami? » 2008-08-12 23:17:59 A więc robię sobie taki większy projekt (zaczynam) i jak zwykle mam jakiś problem. :( Mam klasę bohater, a zaraz za nią deklarację obiektu tej klasy o nazwie gracz. Niestety w innej funkcji (i innym pliku) program nie rozpoznaje np. zmiennej gracz.x . Walczę z tym pare godzin i nic, dalej nie dizła. :( Oto krótki kod z naglowek.h: class bohater { private: public: }; bohater gracz; Log: Kompilator: Default compiler Building Makefile: "C:\Dev-Cpp\cwiczenia_z_allegro\xxx\Makefile.win" Wykonywanie make... make.exe -f "C:\Dev-Cpp\cwiczenia_z_allegro\xxx\Makefile.win" all g++.exe -c ruch_AI.cpp -o ruch_AI.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -DALLEGRO_STATICLINK
ruch_AI.cpp: In function `void ruch(char**)': ruch_AI.cpp:7: error: `gracz' undeclared (first use this function) ruch_AI.cpp:7: error: (Each undeclared identifier is reported only once for each function it appears in.)
make.exe: *** [ruch_AI.o] Error 1
Wykonanie zakończone Wiem, że z tego nie wiele nie widać, ale jakoś wole nie pokazywać całego kodu. |
|
DejaVu |
» 2008-08-12 23:58:10 W funkcji: korzystasz ze zmiennej gracz która nie istnieje. |
|
lynx Temat założony przez niniejszego użytkownika |
Wcale nie korzystam » 2008-08-13 09:43:10 KOrzystam ze zmiennych podobnych do gracz.x . |
|
DeBugger |
» 2008-08-13 11:20:29 No to zmień nazwę tej zmiennej żeby był gracz a nie gracz.x. |
|
DejaVu |
» 2008-08-13 13:10:49 Nie zoruzumiałeś mnie... zmienna nie istnieje, więc nie możesz z niej korzystać. Mówiąc prościej masz prawdopodobnie: void ruch() { gracz.x++; }
Bohater gracz;
Żebyś mógł korzystać ze zmiennej musi być ona zadeklarowana wcześniej - zanim zostanie ona użyta. |
|
lynx Temat założony przez niniejszego użytkownika |
» 2008-08-13 14:46:46 Chyba masz racje nie wiedzieć czemu najpierw sprawdza plik ruch_AI.cpp, a w main mam napisane wyraźnie: #include"naglowek.h" #include"ruch_AI.cpp"
A zarówno deklaracja klasy jak i obiektu znajduję się w naglowek.h, gdy przeniosłem deklarację obiektu w funkcję ruch znajdującą się w pliku ruch_AI.cpp, wyświetla błąd o braku funkcji(klasy) bohater. Chciałem przenieść też deklarację klasy, ale jest tam deklaracja wskaźnika do zmiennej typu BITMAP. A więc mamy kolejny błąd z powodu braku funkcji #include<allegro.h> znajdującej się w pliku naglowek.h . Co zrobić, aby najpierw sprawdzał plik naglowek.h tak jak mam napisane? /edit1: Już wiem z jakiego powodu sprawdza najpierw plik ruch_AI.cpp, a nie naglowek.h . Kompiluje w takiej kolejności dlatego, że plik ruch_AI zawiera rozszerzenie *cpp. Tylko nie wiem jak to zmienić(kolejność) bez zmiany rozszerzenia, i czy wogóle tak się da? |
|
DejaVu |
» 2008-08-13 15:07:58 Nie należy dołączać plików *.cpp Powyższy zapis jest błędny. /edit: Formalnie powinieneś mieć dodane pliki *.cpp do projektu. Każdy plik *.cpp (poza plikiem z funkcją main) powinien posiadać plik *.hpp (*.h). W pliku *.cpp powinien być zapis: #include "*.hpp". Plik *.hpp powinien być zbudowany: #ifndef __nazwa_pliku_hpp__ #define __nazwa_pliku_hpp__
#endif
Kompilator wciągnie pliki *.cpp jeśli będą one dodane do projektu pomimo, iż nigdzie nie będziesz miał include'a do nich. |
|
lynx Temat założony przez niniejszego użytkownika |
OK! Teraz działa! » 2008-08-13 16:13:17 Nie zabardzo rozumiem, szczególnie tego po co te funkcje preprocesora, jeżeli mi już wszystko działa. ;D Zamieniłem plik *cpp na *hpp i to samo zrobiłem w include, działa wszystko w porządku. Dzięki wielkie, bo zabardzo nie wiedziałem jak to rozwiązać, pozdr. |
|
« 1 » |