Domanda

Sto cercando di accedere a un membro variabili struct, ma io non riesco a ottenere la giusta sintassi. I due errori di compilazione pr. accesso sono: errore C2274: 'stile funzione CAST': '' illegale lato destro operatore errore C2228: a sinistra di '.otherdata' deve avere classe / struttura / unione Ho provato varie modifiche, ma nessuno di successo.

#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;
}
È stato utile?

Soluzione

Hai solo definire una struct lì, non allocare uno. Prova questo:

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

int main(){
    Foo foo;
    foo.mybar.otherdata = 5;

    cout << foo.mybar.otherdata;

    return 0;
}

Se si vuole riutilizzare lo struct in altre classi, è anche possibile definire l'esterno struct:

struct Bar {
  int otherdata;
};

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

Altri suggerimenti

Bar è la struttura interna definita all'interno Foo. Creazione di oggetti Foo non implicitamente creare membri del Bar. È necessario creare esplicitamente l'oggetto di Bar utilizzando la sintassi Foo::Bar.

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

In caso contrario,

Creare l'istanza bar come membro della 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;

Si crea una struttura annidata, ma non hai mai creare qualsiasi istanza di esso all'interno della classe. È necessario dire qualcosa come:

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

Si può quindi dire che:

foo.bar.otherdata = 5;

Siete solo dichiarando Foo :: Bar ma non un'istanza (non so se questa è la terminologia corretta)

Vedi qui per l'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;
    };

Qui avete appena definito una struttura, ma non è stato creato alcun oggetto di esso. Quindi quando si dice foo.Bar.otherdata = 5; è errore del compilatore. Creare un oggetto di struct Bar come Bar m_bar; e quindi utilizzare Foo.m_bar.otherdata = 5;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top