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;
}
¿Fue útil?

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;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top