2010-11-27 3 views
1

je classe qui ressemble àcomment utiliser définir struct dans une autre classe

struct Games 
{ char Name[80]; 
char Rating; 
bool Played; 
long NumberOfKills; 
} Unreal, Blizzard[3]; 

typedef Games* Gamesptr; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int x; 
    Gamesptr ptr = new Games; 
    return 0; 
} 

Maintenant, je veux utiliser le struct défini ci-dessus dans une autre classe comme ci-dessous

structTest::structTest(void) 
{ 
} 

structTest::~structTest(void) 
{ 
} 
void structTest::test(void) 
{ 
    // goes here   
    Games *structptr = new Games;// This not working .... 
} 

comment je ne le fais ..when je l'ai essayé me jette 'erreur constructeur par défaut non disponible disponible' erreur ...

+0

'par exemple struct jeux' - Cela semble déroutant – Chubsdad

+1

ce qui déroute .. Je veux utiliser la structure dans une autre classe. Comment est-ce que je fais ça ... simple est-il ?? –

Répondre

1

Je pense que vous devriez améliorer votre mise en forme, car même en ce moment il est déjà devenu difficile lire. Je ne peux presque jamais penser à ce qui pourrait arriver aux étapes suivantes de votre projet.

Maintenant - directement à la question.

Je pense que vous voulez avoir les éléments suivants:

struct Games { 
    // whatever 
    bool value; 
}; 

struct GamesHolder { 
    Games games; 
}; 

Maintenant, si le Games est non seulement un support de données brutes, mais se tient pour une sorte de l'abstraction ou détient une donnée trop être placé sur la pile, vous pouvez utiliser le modèle suivant:

struct GamesHolder { 
    Games* games_pointer; 
}; 

l'initialisation peut maintenant être mis en œuvre de la manière suivante:

GamesHolder games_holder; 
games_holder.games_pointer = new Games(...whatever); 

// If the memory is not cleared when the 'games_holder' 
// leaves the scope - bang - a memory leak. 

Tant que parfois la gestion de la mémoire manuelle devient une douleur dans le ss *, vous aussi pouvez commencer à utiliser des pointeurs partagés:

struct GamesHolder { 
    std::shared_ptr<Games> games_pointer; 
} 

GamesHolder games_holder; 
games_holder.games_pointer.reset(new Games(...)); 

// No leak if the 'holder' leaves the scope - memory 
// is being automatically disposed. 
2

Il semble que votre struct Games est déclarée dans un fichier, et structTest dans un autre fichier. Est-ce correct?

Votre classe structTest a besoin de voir la définition de la structure Games pour fonctionner.

Placez la structure Games dans son propre fichier (appelez-le Games.h). #include cela dans le fichier qui inclut votre main fonction et dans le fichier qui définit la classe structTest.

Notez que Unreal et Blizzard[3] doivent encore être dans le fichier qui inclut votre fonction main, pas dans le fichier d'en-tête, qui devrait contenir seulement la définition struct (et éventuellement le typedef si vous prévoyez d'utiliser que dans d'autres modules) .

Questions connexes