2014-05-09 10 views
3

mise à jour ci-dessousC++ Création d'un « emballage »

Je suis en train de créer cette enveloppe pour contenir des pointeurs vers toutes les autres classes. Je l'ai frappé cette question (exemple):

main.cpp

struct wrap { 
    Game* game; 
    Player* player; 
    Map* map; 
}; 

game.h

class Game { 
    private: 
    wrap* info; 
} 

Y at-il un moyen de contourner cela, a besoin wrap jeu et jeu a besoin wrap. (Je ne sais classe wrapper [ce struct cas] n'est pas la meilleure pratique, mais je suis souvent besoin Qu'Info dans d'autres classes.)

Mise à jour Maintenant, j'ai un nouveau problème.

items.h

// top 
struct CoreInfo; 


void Items::test() { 
    struct CoreInfo* b; 
    //b->testing = 4; 
} 

(le CoreInfo struct contient un « test int. » Variable et je ne peux pas comprendre comment accéder à quoi que ce soit dans la classe des éléments, erreur normale: 7 demande « test » pour membre dans 'b', qui est de type non-classe 'CoreInfo *'

+4

Vous pouvez transférer une classe par rapport à l'autre. – 0x499602D2

Répondre

7

simplement déclarer avant la struct enveloppe, comme indiqué ci-dessous:

main.cpp

#include "game.h" 

struct wrap { 
    Game* game; 
    Player* player; 
    Map* map; 
}; 

game.h

struct wrap; 

class Game { 
    private: 
    struct wrap* info; 
} 

modifier:

le problème est que vous n'avez pas fait une séparation entre déclaration et définition en tirant parti des unités de compilation. Si vous définir votre classe et ses membres dans une unité de compilation (items.cpp), tandis que déclarant dans l'en-tête items.h, vous n'aurez aucun problème.

Faisons un exemple pour illustrer ceci:

foo.h

#include "bar.h" 

class A { 
    B b_instance; 
    void do_something(int i, int j); 
} 

foo.cpp

#include "foo.h" 

int A::do_something(int i, int j) { 
    return i+j; 
} 

bar.h

class B { 
    A a_instance; 
    void use_a(); 
} 

bar.cpp

#include "foo.h" // which includes bar.h as well 

void B::use_a() { 
    int k = a_instance.do_something(); 
} 
+0

Merci, c'est exactement ce que je cherchais. Maintenant, j'ai un problème de suivi (j'ai mis à jour mon premier post.) –

+0

si vous avez un autre problème, s'il vous plaît faire un autre post à ce sujet, ne modifiez pas vos anciennes questions qui avaient une réponse. – zmo

+0

Très bien.Une dernière chose, j'ai essayé de convertir certains de mes fichiers en unités de compilation et d'avoir plusieurs problèmes de définition parce que j'utilise un fichier header.h. Puis-je déplacer toutes les fonctions et classes dans un fichier et avoir les fonctions dans leur (nouveau) fichier respectif .cpp? [Je voulais juste poser une dernière question simple ...] –