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

Problem z Code::Block

Ostatnio zmodyfikowano 2013-05-24 20:18
Autor Wiadomość
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
C/C++
#ifndef CPP_H_INCLUDED
#define CPP_H_INCLUDED

// --------------- Pliki naglowkowe wchodzace w sklad biblioteki --------------- //
#include "Tekstury.h"

// ----------------------------------------------------------------------------- //
#endif
Plik Tekstury.h
C/C++
#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
C/C++
#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
C/C++
#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
C/C++
#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 :
C/C++
#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
P-83794
pekfos
» 2013-05-24 18:42:44
Nie widzę definicji tej zmiennej:
C/C++
static vector < Przedmiot > Przedmioty;

Podaj kompletny log kompilacji.
P-83796
mostrom
» 2013-05-24 20:18:10
brak dyrektywy #include<przedmiot.h> w pliku CPP.h
EDIT

externy w CPP.h?
P-83804
« 1 »
  Strona 1 z 1