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

Projekt Allegro 5 podzielony na kilka plików

Ostatnio zmodyfikowano 2014-06-21 13:56
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
Projekt Allegro 5 podzielony na kilka plików
» 2014-06-19 15:16:21
Witajcie, tworzę projekt Allegro 5 podzielony na kilka plików i mam problem z kompilacją. W pliku .hpp mam deklarację klasy w której korzystam z typu ALLEGRO_BITMAP, jednak kompilator woła, że "'ALLEGRO_BITMAP' does not name a type" pomimo iż includuję w tym pliku .hpp to co w głównym pliku .cpp:
C/C++
#include <allegro5/allegro.h>
#include "allegro5/allegro_image.h"

Potrafi ktoś wytłumaczyć jak to rozwiązać, żeby móc we wszystkich plikach korzystać z typów i funkcji Allegro ? Czy powtórzyć gdzieś inicjalizacje Allegrowskie (al_init()/al_init_image_addon()) ?
P-112317
Jacob99
» 2014-06-19 15:48:57
Pokaż jak podzieliłeś kod na pliki.
P-112321
McAffey
Temat założony przez niniejszego użytkownika
» 2014-06-19 16:02:46
Standardowo, pokażę wersję uszczuploną tylko do testów :

główny plik main.cpp w którym mam includowane :
C/C++
#include <allegro5/allegro.h>
#include "allegro5/allegro_image.h"
#include "allegro5/allegro_native_dialog.h"
#include "plik_naglowkowy.hpp"

a potem w funkcji
int main()
 wszystkie potrzebne inicjalizacje, czyli m.in.
al_init()
 i
al_init_image_addon()
.

W pliku nagłówkowym plik_naglowkowy.hpp mam tylko deklarację klasy a w niej zmienną typu ALLEGRO_BITMAP. Plik z definicją tej klasy nie ma znaczenia. Pokomentowałem teraz wszystko tak, że gdy zakomentuję jeszcze tę linijkę :
ALLEGO_BITMAP * bitmapa;
 to wszystko się kompiluje, a gdy ją "odkryję" to zostaje tylko komunikat o tym że kompilator nie zna takiego typu. Dla rozwiązania problemu pousuwałem pozostałe pliki i mam teraz "warunki laboratoryjne", jednak nie potrafię tego rozwiązać, samo includowanie plików:
C/C++
#include <allegro5/allegro.h>
#include "allegro5/allegro_image.h"
nie rozwiązuje problemu.
P-112325
SeaMonster131
» 2014-06-19 16:14:14
Niech plik *.h includuje allegro_image oraz dodaj słówko extern przed deklaracją zmiennej:
C/C++
#include <allegro5/allegro5_image.h>

extern ALLEGRO_BITMAP * img;

Następnie w jakimś pliku *.cpp includuj stworzony plik *.h oraz dodaj zwykłą deklarację tej samej zmiennej:
C/C++
#include "plik.h"

ALLEGRO_BITMAP * img;
P-112326
Jacob99
» 2014-06-19 16:14:25
To pokaż kod z plik_naglowkowy.hpp
P-112327
McAffey
Temat założony przez niniejszego użytkownika
» 2014-06-19 16:37:09
Zrobiłem
extern ALLEGO_BITMAP * bitmapa;
 a w pliku main.cpp zaraz pod includowaniem tego pliku hpp
ALLEGO_BITMAP * bitmapa;
 ale dalej to samo.

Przy czym ten błąd "error: 'ALLEGO_BITMAP' does not name a type|" występuje gdy w pliku nagłówkowym mam oba includy :
C/C++
#include <allegro5/allegro.h>
#include "allegro5/allegro_image.h"

bo gdy zostawiam samo :
#include "allegro5/allegro_image.h"
 to jest jeszcze gorzej :

allegro_image.h|32|error: 'al_init_image_addon' has not been declared|
allegro_image.h|32|error: expected identifier before '(' token|
allegro_image.h|32|error: expected constructor, destructor, or type conversion before ';' token|
allegro_image.h|33|error: 'al_shutdown_image_addon' has not been declared|
allegro_image.h|33|error: expected identifier before '(' token|
allegro_image.h|33|error: expected constructor, destructor, or type conversion before ';' token|
allegro_image.h|34|error: expected constructor, destructor, or type conversion before '(' token|
plik_naglowkowy.hpp|74|error: 'ALLEGO_BITMAP' does not name a type|

@Jacob99 no tam jest tylko deklaracja klasy :
C/C++
#ifndef PLIK_NAGLOWKOWY_HPP
#define PLIK_NAGLOWKOWY_HPP

#include <allegro5/allegro.h>
#include "allegro5/allegro_image.h"

class klasa
{
    extern ALLEGO_BITMAP * bitmapa;
   
};

#endif
P-112329
McAffey
Temat założony przez niniejszego użytkownika
» 2014-06-21 13:56:35
Oczywiście chodziło tylko o jedną literkę, zrobiłem literówkę w "ALLEGO_BITMAP". Tak czy siak dzięki. Zamykam :)
P-112456
« 1 »
  Strona 1 z 1