C ++: pour accéder à la syntaxe struct membre du pointeur à la classe
Question
Je suis en train d'accéder à un membre variables structs, mais je ne peux pas sembler obtenir le droit de syntaxe. Les deux erreurs de compilation pr. accès sont: erreur C2274: « cast fonction de style »: illégale côté droit de « » opérateur erreur C2228: à gauche de '.otherdata' doit avoir la classe / struct / union J'ai essayé plusieurs changements, mais aucun succès.
#include <iostream>
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;
}
La solution
Vous définissez seulement struct là, d'allouer un. Essayez ceci:
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 struct dans d'autres classes, vous pouvez également définir la structure extérieure:
struct Bar {
int otherdata;
};
class Foo {
public:
Bar mybar;
int somedata;
}
Autres conseils
Bar
structure intérieure est définie à l'intérieur Foo
. Création d'objet Foo
ne crée pas implicitement les membres du Bar
. Vous devez créer explicitement l'objet de Bar en utilisant la syntaxe Foo::Bar
.
Foo foo;
Foo::Bar fooBar;
fooBar.otherdata = 5;
cout << fooBar.otherdata;
Dans le cas contraire,
Créer l'instance barre en tant que membre en 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 imbriquée, mais vous ne créez toutes les instances de celui-ci au sein de la classe. Vous avez besoin de dire quelque chose comme:
class Foo{
public:
struct Bar{
int otherdata;
};
Bar bar;
int somedata;
};
Vous pouvez alors dire:
foo.bar.otherdata = 5;
Vous ne déclarez Foo :: Bar, mais vous n'instancier pas (pas sûr que ce soit la terminologie correcte)
Voir ici pour l'utilisation:
#include <iostream>
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;
};
Vous venez de définir une structure, mais pas créé un objet de celui-ci. Par conséquent, lorsque vous dites foo.Bar.otherdata = 5;
est erreur du compilateur. Créer un objet de Bar struct comme Bar m_bar;
puis utilisez Foo.m_bar.otherdata = 5;