C ++: syntaxe pour accéder à la structure de membre d’un pointeur à une classe

J’essaie d’accéder à des variables de structs membres, mais je n’arrive pas à obtenir la syntaxe correcte. Les deux erreurs de compilation pr. les access sont: erreur C2274: ‘transtypes de style de fonction’: illégaux car le côté droit de ‘.’ erreur d’opérateur C2228: la partie gauche de ‘.otherdata’ doit avoir la classe / struct / union. J’ai essayé divers changements, mais aucun n’a réussi.

#include  using std::cout; class Foo{ public: struct Bar{ int otherdata; }; int somedata; }; int main(){ Foo foo; foo.Bar.otherdata = 5; cout << foo.Bar.otherdata; return 0; } 

Vous définissez seulement une structure ici, pas en allouer une. Essaye ça:

 class Foo{ public: struct Bar{ int otherdata; } mybar; int somedata; }; int main(){ Foo foo; foo.mybar.otherdata = 5; cout << foo.mybar.otherdata; return 0; } 

Si vous souhaitez réutiliser la structure dans d'autres classes, vous pouvez également définir la structure à l'extérieur:

 struct Bar { int otherdata; }; class Foo { public: Bar mybar; int somedata; } 

Bar est une structure interne définie à l’intérieur de Foo . La création d’object Foo ne crée pas implicitement les membres du Bar . Vous devez créer explicitement l’object de Bar en utilisant la syntaxe Foo::Bar .

 Foo foo; Foo::Bar fooBar; fooBar.otherdata = 5; cout << fooBar.otherdata; 

Autrement,

Créez l'instance Bar en tant que membre de la classe Foo .

 class Foo{ public: struct Bar{ int otherdata; }; int somedata; Bar myBar; //Now, Foo has Bar's instance as member }; Foo foo; foo.myBar.otherdata = 5; 

Vous créez une structure nestede, mais vous n’en créez jamais d’instances dans la classe. Vous devez dire quelque chose comme:

 class Foo{ public: struct Bar{ int otherdata; }; Bar bar; int somedata; }; 

Vous pouvez alors dire:

 foo.bar.otherdata = 5; 

Vous déclarez seulement Foo :: Bar mais vous ne l’instanciez pas (vous n’êtes pas sûr que ce soit la bonne terminologie)

Voir ici pour utilisation:

 #include  using namespace std; class Foo { public: struct Bar { int otherdata; }; Bar bar; int somedata; }; int main(){ Foo::Bar bar; bar.otherdata = 6; cout << bar.otherdata << endl; Foo foo; //foo.Bar.otherdata = 5; foo.bar.otherdata = 5; //cout << foo.Bar.otherdata; cout << foo.bar.otherdata << endl; return 0; } 
 struct Bar{ int otherdata; }; 

Ici, vous venez de définir une structure sans en créer d’object. Par conséquent, lorsque vous dites foo.Bar.otherdata = 5; c’est une erreur du compilateur. Créez un object de struct Bar comme Bar m_bar; puis utilisez Foo.m_bar.otherdata = 5;