C ++: sintaxis para acceder a struct miembro de puntero a la clase
Pregunta
Estoy intentando acceder a las variables structs miembros, pero me parece que no puede obtener el derecho de sintaxis. Los dos errores de compilación pr. acceso son: error C2274: 'estilo función de conversión': '' ilegal como parte derecha de operador error C2228: a la izquierda de '.otherdata' debe tener la clase / struct / union He probado varios cambios, pero ninguno con éxito.
#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;
}
Solución
Sólo se define una estructura allí, no asignar uno. Prueba esto:
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 desea volver a utilizar la estructura en otras clases, también puede definir el exterior estructura:
struct Bar {
int otherdata;
};
class Foo {
public:
Bar mybar;
int somedata;
}
Otros consejos
Bar
es estructura interna definida en el interior Foo
. Creación del objeto Foo
no crea implícitamente miembros del Bar
. Es necesario crear explícitamente el objeto de barra utilizando la sintaxis Foo::Bar
.
Foo foo;
Foo::Bar fooBar;
fooBar.otherdata = 5;
cout << fooBar.otherdata;
Si no,
Crea la instancia de la barra como miembro de la clase 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;
Se crea una estructura anidada, pero nunca de crear instancias de la misma dentro de la clase. Es necesario decir algo como:
class Foo{
public:
struct Bar{
int otherdata;
};
Bar bar;
int somedata;
};
A continuación, puede decir:
foo.bar.otherdata = 5;
Sólo está declarando Foo :: bar, pero no se crean instancias que (no estoy seguro si esa es la terminología correcta)
Vea aquí para el uso:
#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;
};
A continuación, que acaba de definir una estructura, pero no se ha creado ningún objeto de la misma. Por lo tanto, cuando se dice que es foo.Bar.otherdata = 5;
error del compilador. Crear un objeto de estructura bar como Bar m_bar;
y luego usar Foo.m_bar.otherdata = 5;