IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Fichiers hpp et structures


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Par défaut Fichiers hpp et structures
    Bonsoir.

    J'ai deux fichiers hpp :

    Terrain.hpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #ifndef _CLASS_TERRAIN_H
    #define _CLASS_TERRAIN_H
     
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <math.h>
     
    #include "C_Case.hpp"
     
    using namespace std;
     
    /*
     
    */
    struct Data_Decors
    {
        int Base_x;//L'emplacement de sa base en x sur l'image.
        int Base_y;//l'emplacement de sa base en y sur l'image.
        int Taille_x;//Le nombre de case en x que le décors prend.
        int Taille_y;//Le nombre de case en y que le décors prend.
    };
     
    struct Data_Texture_Sol
    {
        int Width;//La largeur d'une texture
        int Height;//La hauteur d'une texture
        int nombre_textures;//Le nombre de textures qu'il y a par chipset
    };
     
     
    class C_Terrain
    {
    private:
     
        //Taille de la map
        int LONGUEUR;
        int LARGEUR;
        int Pos_x;
        int Pos_y;
     
     
        SDL_Surface **Img_Textures_sol;
        SDL_Surface **Img_Textures_bord;
        SDL_Surface **Img_Decors;
        SDL_Surface **Img_Coffre;
        SDL_Surface **Img_Charset;
        SDL_Surface *Terrain;
     
        TTF_Font *font;
     
        void Affichage_Decors(int const x, int const y);
        void Mise_a_jour();
        //Data_Decors *Data_Decors;
        vector<Data_Texture_Sol> m_DataTextureSolList;
        class C_Case *Case;
        int clicked;
     
    public:
        // Constructeur.
        C_Terrain();
     
        // Destructeur.
        ~C_Terrain();
     
        //Chargement des set
        int Init();
     
        //Chargement, Sauvegarde de maps
        int LoadMap(string fichier);
        int NewMap(int const largeur, int const longueur);
        int SaveMap(string Name);
     
        //Affichage
        void Affichage(SDL_Surface *cible);
     
        //Connaitre les données
        //Data_Decors *Get_DataDecors(int Decors);
        Data_Texture_Sol *Get_DataTextureSol(int TextureSol);
     
        //Clic sur une case
        int Clic(int const numSritex, int const numSpritey, int const xsouris, int const ysouris, int const clic);
    };
     
    #endif
    Et Case.hpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #ifndef _CLASS_CASE_H
    #define _CLASS_CASE_H
     
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <math.h>
     
    #include "SDL_Event.hpp"
    #include "C_Terrain.hpp"
     
    using namespace std;
     
    /*
    CLASSE CASE
     
    Liée à la classe C_Terrain, elle contient les informations sur la case.
    */
    class C_Case
    {
    private:
        int affich_x;//La position x de la case
        int affich_y;//La position y de la case
        short elevation;//La hauteur de la case, positif
        int texture_sol;//La texture du sol de la case
        Data_Texture_Sol *pointeur_texture_sol;//L'adresse de la texture
        int texture_bord;//La texture du bord de la case
        int decors;//Le décors placé sur la case
        int Nr_texture;//Le Nr de la texture sur l'image
        Data_Decors *pointeur_decors;//L'adresse du décors
        int Decors_x;//la position X et Y du décors
        int Decors_y;//
        int Coffre;
        int Item;
        int PNJ;
        int Charset;
        int Angle_Charset;
        int ID;
        string Map;
     
    public:
     
        SDL_Events *Events;
        class C_Terrain Terrain();
        // Constructeur.
        C_Case(SDL_Events &Event);
     
        // Destructeur.
        ~C_Case();
     
        int Get_TextureSol();
        void SetData(string buf, int pos_x, int pos_y);
        //Clic sur une case
        int Clic();
    };
     
    #endif
    Mais lors de la compilation, ça plante à la ligne de Case.hpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Data_Texture_Sol *pointeur_texture_sol;
    'ISO forbids declaration of Data_Texture_Sol with no type'

    En gros, le compilateur ne voit pas Data_Texture_Sol se trouvant dans Terrain.hpp. Pourquoi ?
    Je travaille sous Code::Blocks.
    Ne vous étonnez pas si le code est sal et étrange, je suis en train de remodeler mon programme.

    En attendant votre réponse

  2. #2
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Pourquoi des ".hpp"? Les ".h" conviennent très bien me semble-t-il.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par reggae
    Pourquoi des ".hpp"? Les ".h" conviennent très bien me semble-t-il.
    .hpp est très utilisé (voir boost par exemple, ou la VCL). Ca n'a rien d'illogique, par rapport au couple .c / .cpp...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu as des inclusions cycliques, ce que tu peux a priori éviter en plaçant tes structures Data_Decors et Data_Texture_Sol dans un en-tête séparé. Tu peux aussi simplement faire des déclarations anticipées, puisque tu ne déclares que des pointeurs.
    Voir la FAQ C++ pour plus de détails.

  5. #5
    Membre très actif
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu as des inclusions cycliques, ce que tu peux a priori éviter en plaçant tes structures Data_Decors et Data_Texture_Sol dans un en-tête séparé. Tu peux aussi simplement faire des déclarations anticipées, puisque tu ne déclares que des pointeurs.
    Voir la FAQ C++ pour plus de détails.
    Hum... Qu'est-ce que des inclusions cycliques ?

    Et je suis passé par la FAQ avant de poster, mais j'ai pas trop compris comment régler le problème... Surtout que j'aparemment ça devrait fonctionner.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Hum... Qu'est-ce que des inclusions cycliques ?
    Terrain.hpp inclue Case.hpp qui inclue Terrain.hpp qui inclue Case.hpp qui inclue Terrain.hpp qui inclue Case.hpp qui inclue Terrain.hpp qui inclue Case.hpp qui inclue Terrain.hpp qui inclue... Au bout d'un moment le compilateur s'arrête, et en général à ce moment il te sort également une erreur du genre de celle que tu as.

    Et je suis passé par la FAQ avant de poster, mais j'ai pas trop compris comment régler le problème... Surtout que j'aparemment ça devrait fonctionner.
    Je te l'ai dit, et la FAQ aussi, il suffit d'utiliser des déclarations anticipées au lieu d'inclure les en-têtes.

  7. #7
    Membre très actif
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Par défaut
    Désolé mais j'ai du mal à comprendre... La FAQ n'est pas très claire... En effet, dans A.h, il inclut la class B, or comment le compilateur peut-il la trouver sans inclure le fichier b.h ?? J'ai vraiment du mal à comprendre....

    Merci de m'aider en tout cas

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Justement il n'a pas à la trouver, puisqu'on n'en déclare qu'un pointeur (un pointeur sur A ou un pointeur sur Tartanpion, au niveau déclaration c'est pareil pour le compilo). Donc on peut se contenter de dire au compilo que notre classe existe et qu'elle sera incluse plus tard.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire fichier exe.config structure complexe
    Par Ogotcha dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/07/2008, 13h31
  2. Problémes avec fichiers, arboresence et structures
    Par waloo92i dans le forum Débuter
    Réponses: 11
    Dernier message: 12/05/2008, 11h19
  3. probleme pour affilier un fichier a une structure
    Par coco.cohen dans le forum Débuter
    Réponses: 2
    Dernier message: 20/11/2007, 17h38
  4. Utilisation de fichiers avec une structure
    Par showdown dans le forum C
    Réponses: 16
    Dernier message: 07/12/2006, 18h30
  5. Réponses: 9
    Dernier message: 22/09/2005, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo