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;