Problem z Code::Block
Ostatnio zmodyfikowano 2013-05-24 20:18
fers334 Temat założony przez niniejszego użytkownika |
Problem z Code::Block » 2013-05-24 18:30:17 Siemanko mam problem mianowicie chciałem napisać sobie własną bibliotekę za co wcześniej nigdy się nie brałem. Oto uproszczona przykładowa wersja biblioteki: Plik CPP.h #ifndef CPP_H_INCLUDED #define CPP_H_INCLUDED
#include "Tekstury.h"
#endif Plik Tekstury.h #ifndef TEKSTURY_H #define TEKSTURY_H
#include "Przedmiot.h" #include <vector> #include <string> using namespace std;
class Tekstury { private: static vector < Przedmiot > Przedmioty; string nazwa_pliku_zapisu; public: Tekstury( const char * _nazwa_pliku_zapisu ); ~Tekstury(); void Wczytaj_teksture( const char * nazwa_img, int poz_x, int poz_y, int w, int h ); void Wczytaj_dane_tekstur_z_pliku(); void Zapisz_dane_tekstur_w_pliku(); };
#endif Plik Tekstury.cpp #include "Tekstury.h"
Tekstury::Tekstury( const char * _nazwa_pliku_zapisu ) : nazwa_pliku_zapisu( _nazwa_pliku_zapisu ) { } Tekstury::~Tekstury() { if( Przedmioty.size() > 0 ) { Przedmioty.clear(); } }
void Tekstury::Wczytaj_teksture( const char * nazwa_img, int poz_x, int poz_y, int w, int h ) { Przedmiot Nowy( nazwa_img, poz_x, poz_y, w, h ); Przedmioty.push_back( Nowy ); } void Tekstury::Wczytaj_dane_tekstur_z_pliku() { for( int i = 0; i < Przedmioty.size(); i++ ) { Przedmioty[ i ].wczytaj( nazwa_pliku_zapisu.c_str() ); } } void Tekstury::Zapisz_dane_tekstur_w_pliku() { for( int i = 0; i < Przedmioty.size(); i++ ) { Przedmioty[ i ].zapisz( nazwa_pliku_zapisu.c_str() ); } } Plik Przedmiot.h #ifndef PRZEDMIOT_H #define PRZEDMIOT_H
#include <SDL.h> #include <SDL_image.h> #include <fstream> #include <string> using namespace std;
class Przedmiot { private: SDL_Surface * grafika; SDL_Rect wymiary; string nazwa_img; public: Przedmiot( const char * nazwa_img, int poz_x, int poz_y, int w, int h ); virtual ~Przedmiot(); virtual void zapisz( const char * nazwa_pliku ); virtual void wczytaj( const char * nazwa_pliku ); virtual void rysuj( SDL_Surface * ekran ); };
#endif Plik Przedmiot.cpp #include "Przedmiot.h"
Przedmiot::Przedmiot( const char * nazwa_img, int poz_x, int poz_y, int w, int h ) { this->nazwa_img = nazwa_img; this->wymiary.x = poz_x; this->wymiary.y = poz_y; this->wymiary.w = w; this->wymiary.h = h; grafika = IMG_Load( this->nazwa_img.c_str() ); } Przedmiot::~Przedmiot() { SDL_FreeSurface( grafika ); zapisz( "Zapis_Koncowy_Przedmiotu.txt" ); }
void Przedmiot::zapisz( const char * nazwa_pliku ) { ofstream strum_zapisu( nazwa_pliku ); strum_zapisu << nazwa_img << endl; strum_zapisu << wymiary.x << " " << wymiary.y << endl; strum_zapisu << wymiary.w << " " << wymiary.h << endl; strum_zapisu.close(); } void Przedmiot::wczytaj( const char * nazwa_pliku ) { ifstream strum_odczytu( nazwa_pliku ); strum_odczytu >> nazwa_img; strum_odczytu >> wymiary.x >> wymiary.y; strum_odczytu >> wymiary.w >> wymiary.h; strum_odczytu.close(); } void Przedmiot::rysuj( SDL_Surface * ekran ) { SDL_Rect pozycja; pozycja.x = wymiary.x; pozycja.y = wymiary.y; SDL_BlitSurface( grafika, NULL, ekran, & pozycja ); } Problem jest w tym że gdy probuje z niej skozystac np tak : #include <CPP.h> #include <SDL.h>
int main( int argc, char * args[] ) { SDL_Surface * ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE ); SDL_Event zdarzenie; bool koniec = false; Tekstury Plik( "Save.txt" ); while( !koniec ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { koniec = true; } } } return 0; } TO wyswietla sie blad: ||=== ProgramX, Debug ===| \Pulpit\Pliki c++\cpp\libcpp.a(Tekstury.o)||In function `ZN8TeksturyD2Ev':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|7|undefined reference to `Tekstury::Przedmioty'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|9|undefined reference to `Tekstury::Przedmioty'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Tekstury.o)||In function `ZN8Tekstury16Wczytaj_tekstureEPKciiii':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|16|undefined reference to `Tekstury::Przedmioty'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Tekstury.o)||In function `ZN8Tekstury28Wczytaj_dane_tekstur_z_plikuEv':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|22|undefined reference to `Tekstury::Przedmioty'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|20|undefined reference to `Tekstury::Przedmioty'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Tekstury.o):C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Tekstury.cpp|29|more undefined references to `Tekstury::Przedmioty' follow| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Przedmiot.o)||In function `ZN9PrzedmiotC2EPKciiii':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Przedmiot.cpp|12|undefined reference to `IMG_Load'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Przedmiot.o)||In function `ZN9PrzedmiotD2Ev':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Przedmiot.cpp|16|undefined reference to `SDL_FreeSurface'| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\libcpp.a(Przedmiot.o)||In function `ZN9Przedmiot5rysujEP11SDL_Surface':| C:\Documents and Settings\Fers\Pulpit\Pliki c++\cpp\src\Przedmiot.cpp|42|undefined reference to `SDL_UpperBlit| ||=== Build finished: 9 errors, 0 warnings (0 minutes, 2 seconds) ===| Problem w tym że plik lib Przenioslem do lib oraz pliki naglowkowe do includ.W samym code::block'u w Setting/Compiler.../LinkerSetting/LinkLibraries dodalem takze plik lib niewiem co mam dalej zrobic. Z gory dzieki za pomoc |
|
pekfos |
» 2013-05-24 18:42:44 Nie widzę definicji tej zmiennej: static vector < Przedmiot > Przedmioty;
Podaj kompletny log kompilacji. |
|
mostrom |
» 2013-05-24 20:18:10 brak dyrektywy #include<przedmiot.h> w pliku CPP.h EDIT
externy w CPP.h? |
|
« 1 » |