2010-06-20 3 views
2
#include<iostream> 
using namespace std; 
struct My_Class{ 
class My_struct{ 
int am_i_in_class_or_struct; 
}; 
}; 

int main(){ 
cout<<sizeof(My_Class)<<endl; 
cout<<sizeof(My_struct)<<endl; 
cout<<sizeof(int); 
} 

S'il vous plaît Expliquer: quand je le programme exécuté ci-dessus sur Turbo C je suis arrivé sortie: Maintenant, ne doit pas être la taille même dans chaque cas, ou au moins My_Class devrait avoir la même taille ou plus grande que My_struct !! S'il y a des erreurs dans le programme, corrigez-les si vous le pouvez, ou bien ignorez-le et concentrez-vous sur la question à résoudre! Je ne fais pas confiance à Turbo C en tant que tel ... mais actuellement mon VS 2008 continue de s'écraser en raison de mon Ram va mal!Nesting de struct et classes

Répondre

5

Vous imbriquez les déclarations, mais pas les données. Déclarer une classe à l'intérieur d'une autre classe ne rend pas magiquement les membres de la classe interne aussi membres de la classe externe. Votre code est pratiquement équivalent à un simple

struct My_Class{ 
}; 

class My_struct{ 
    int am_i_in_class_or_struct; 
}; 

avec une seule différence. Dans votre code, le nom de la structure est My_Class::My_struct. Dans ma version, c'est juste My_struct. Seuls les noms changent. Rien d'autre. (En fait, il existe d'autres différences en ce qui concerne les droits d'accès, mais elle n'est pas immédiatement pertinente pour la question.)

+0

Comment? La manière "habituelle": les données sont "imbriquées" en déclarant un membre de données "My_struct my_struct;" dans la classe externe. – AnT

+0

@strut avez-vous essayé d'utiliser le code de ma réponse pour cela? –

+0

@strut: Je ne sais pas comment vous l'utilisez pour obtenir une telle erreur. Vous devez poster le code. Faire ce que j'ai suggéré dans mon commentaire ci-dessus ne provoque aucune erreur du compilateur. De même, lorsque vous êtes dans 'My_Class', vous n'avez pas besoin d'utiliser le nom complet' My_Class :: My_struct'. Juste 'My_struct' est suffisant. Mais 'My_Class :: My_struct' devrait aussi fonctionner. – AnT

6

My_Class ne contient pas , il le définit simplement. Si vous souhaitez créer une instance My_struct de l'extérieur My_Class, il s'appellera My_Class::My_struct.

Afin d'inclure effectivement une instance My_struct dans My_Class, vous devriez faire

struct My_Class{ 
    class My_struct{ 
    int am_i_in_class_or_struct; 
    }; 
    My_struct myStructInstance; 
};