Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z klasami?

Ostatnio zmodyfikowano 2008-08-13 16:13
Autor Wiadomość
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:

C/C++
class bohater {
private:
public:
    //pare zmiennych min. int x;
};
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.
P-1260
DejaVu
» 2008-08-12 23:58:10
W funkcji:
C/C++
void ruch( char ** )
{
}
korzystasz ze zmiennej gracz która nie istnieje.
P-1262
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 .
P-1264
DeBugger
» 2008-08-13 11:20:29
No to zmień nazwę tej zmiennej żeby był gracz a nie gracz.x.
P-1265
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:
C/C++
void ruch()
{
    gracz.x++;
}

Bohater gracz;

Żebyś mógł korzystać ze zmiennej musi być ona zadeklarowana wcześniej - zanim zostanie ona użyta.
P-1267
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:

C/C++
#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?
P-1272
DejaVu
» 2008-08-13 15:07:58
Nie należy dołączać plików *.cpp
C/C++
#include"ruch_AI.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:
C/C++
#ifndef __nazwa_pliku_hpp__
#define __nazwa_pliku_hpp__
//Tutaj zawartość pliku nagłówkowego
#endif //__nazwa_pliku_hpp__
Kompilator wciągnie pliki *.cpp jeśli będą one dodane do projektu pomimo, iż nigdzie nie będziesz miał include'a do nich.
P-1273
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.
P-1276
« 1 »
  Strona 1 z 1