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

Jeden enum w kilku plikach

Ostatnio zmodyfikowano 2015-11-29 15:32
Autor Wiadomość
marcolo2307
Temat założony przez niniejszego użytkownika
Jeden enum w kilku plikach
» 2015-11-27 21:13:49
Cześć!

Mam mniej więcej taki kod:


C/C++
// system.hpp
#include "DekEnuma.hpp"
#include "Main.hpp"

C/C++
// DekEnuma.hpp"
enum MojEnum { W1, W2 };

C/C++
//Main.hpp
#include "system.hpp"

class Klasa
{
public:
    MojEnum mojEnum;
};

Otrzymuję błąd "'MojEnum' does not a type". Szukałem w internecie, ale nie znalazłem mojego przypadku. W przypadku klas po prostu piszę "class Klasa;", ale z enum (chyba) tak nie mogę. Macie jakiś pomysł?
P-140952
pekfos
» 2015-11-27 21:21:53
Dołączaj DekEnuma.hpp (a nie system.hpp) w Main.hpp. Dodatkowo, zabezpiecz nagłówki przed wielokrotnym dołączaniem.
P-140956
marcolo2307
Temat założony przez niniejszego użytkownika
» 2015-11-27 21:25:05
Mam zabezpieczone, uznałem że w tym przykładowym tylko zmniejszy to czytelność.

Próbowałem z dołączeniem DekEnuma.hpp, było to samo. Zresztą w teorii to nie powinno nic zmieniać, bo dołączam to pośrednio przez system.hpp.
P-140957
pekfos
» 2015-11-27 21:25:46
Podaj kompletny kod (związany z problemem) i log kompilacji.
P-140958
marcolo2307
Temat założony przez niniejszego użytkownika
» 2015-11-27 21:29:41
C/C++
//system.hpp
// ifndef itd
#include "mapeditor.hpp"
#include "tiles.hpp"

// endif
[ / cpp ]

[ cpp ]
#ifndef mapeditor_hpp
#define mapeditor_hpp

#include "../system.hpp"


class cTiles;
class cTile;


class cMapEditor
{
private:
    MAP_LEVEL PoziomMapy;
   
   
};
C/C++
//tiles.hpp
//ifndef itd
class cTile;
class cRoof;
class cUnderground;
class cVentilation;

enum MAP_LEVEL
{
    GROUND = 0,
    UNDERGROUND = - 1,
    VENTILATION = 1,
    ROOF = 2
};

Niepotrzebne elementy usunąłem. Katalogi w #include się zgadzają.
P-140959
pekfos
» 2015-11-27 21:48:53
To nie jest kompletny kod i nie podałeś logów.
P-140960
marcolo2307
Temat założony przez niniejszego użytkownika
» 2015-11-27 21:52:48
Log:

||=== Build: Debug in Prison Escape (compiler: GNU GCC Compiler) ===|
C:\Users\marco\Desktop\Prison Escape Alpha 0.01\data\buttons\..\mapeditor\mapeditor.hpp|38|error: 'MAP_LEVEL' does not name a type|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Kompletny kod to już tak z 20 plików... Dodałem chyba wszystko co jest potrzebne. Zaraz dodam więcej.

Edit:

System.hpp:
C/C++
#ifndef system_hpp
#define system_hpp

#define GAME_NAME "Prison Escape"
#define GAME_VERSION "Alpha 0.01"


#include "SFML/Audio.hpp"
#include "SFML/Graphics.hpp"


#include <iostream>
#include <string>
#include <fstream>

#include "mapeditor/mapeditor.hpp"
#include "tiles/tiles.hpp"
// inne pliki

#endif // system_hpp
Tiles.hpp:
C/C++
#ifndef tiles_hpp
#define tiles_hpp

#include "../system.hpp"

#define ILOSC_KAFELKOW 10
#define ILOSC_ITEMOW 10

class cTile;
class cRoof;
class cUnderground;
class cVentilation;

enum MAP_LEVEL
{
    GROUND = 0,
    UNDERGROUND = - 1,
    VENTILATION = 1,
    ROOF = 2
};

// pomijam definicje klas, które i tak nie są tu potrzebne, w pliku .cpp jest tylko ich implementacja

#endif //tiles_hpp

Plik mapeditor.hpp:
C/C++
#ifndef mapeditor_hpp
#define mapeditor_hpp

#include "../system.hpp"



// deklaracje klas z innych plików
// próbowałem deklarować enum, ale też były błędy
// enum MAP_LEVEL;
// enum MAP_LEVEL {UNDERGROUND, GROUND...} - problem z podwójną implementacją


class cMapEditor
{
private:
    /*
          czcionki, interface itd.
        */
   
   
    // mapa - kafelkowa 2d. Chcę zrobić kilka jej poziomów w sensie: podziemia, zwykły poziom, wentylacja, dach itd. Przy wyświetlaniu zamierzam użyć switch'a na MAP_LEVEL
    float MAP_WIDTH;
    float MAP_HEIGHT;
    MAP_LEVEL PoziomMapy; // błąd
   
   
    cTile ** Map;
public:
    // niezwiązane metody, konstruktory itd.
   
   
};



#endif // mapeditor_hpp


Edit 2:

Poczytałem jeszcze trochę o enumach i się dowiedziałem, że w zwykłym C++ nie ma możliwości na stworzenie kilku deklaracji, tak jak to jest w przypadku klas. Teraz już kompletnie nie wiem co zrobić :/

P-140961
pekfos
» 2015-11-27 23:25:16
C/C++
// system.hpp
#include "mapeditor/mapeditor.hpp"
#include "tiles/tiles.hpp"
Zamień kolejność. To zdaje się obejdzie problem wywoływany w kodzie, którego nie podałeś. Nagłówki masz źle napisane.
P-140964
« 1 » 2 3
  Strona 1 z 3 Następna strona