C ++: syntaks for tilgang medlem struct fra pekeren til klasse

stemmer
8

Jeg prøver å få tilgang til et medlem structs variabler, men jeg kan ikke synes å få syntaksen riktig. De to Kompilerings- feil pr. tilgang er: error C2274: 'funksjon-style cast': ulovlig som høyre side av '' operatørfeil C2228: venstre '.otherdata' må ha klasse / struct / union Jeg har prøvd ulike endringer, men ingen vellykket.

#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;
}
Publisert på 27/05/2009 klokken 10:53
kilden bruker
På andre språk...                            


5 svar

stemmer
15

Du definerer bare en struct der, ikke tildele en. Prøv dette:

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

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

    cout << foo.mybar.otherdata;

    return 0;
}

Hvis du ønsker å gjenbruke struct i andre klasser, kan du også definere struct utenfor:

struct Bar {
  int otherdata;
};

class Foo {
public:
    Bar mybar;
    int somedata;
}
Svarte 27/05/2009 kl. 10:56
kilden bruker

stemmer
8

Barer indre struktur definert inne Foo. Opprettelse av Fooobjektet ikke implisitt skape Bar's medlemmer. Du må eksplisitt opprette objektet av Bar bruke Foo::Barsyntaks.

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

Ellers,

Opprett Bar eksempel som medlem i Fooklassen.

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;
Svarte 27/05/2009 kl. 10:57
kilden bruker

stemmer
5

Du oppretter en nestet struktur, men du aldri skape alle forekomster av det i klassen. Du trenger å si noe sånt som:

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

Du kan så si:

foo.bar.otherdata = 5;
Svarte 27/05/2009 kl. 10:58
kilden bruker

stemmer
1

Du er bare erklære Foo :: Bar, men du trenger ikke instantiate det (ikke sikker på om det er riktig terminologi)

Se her for bruk:

#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;
}
Svarte 27/05/2009 kl. 11:00
kilden bruker

stemmer
0
struct Bar{
        int otherdata;
    };

Her har du bare definert en struktur, men ikke skapt gjenstand for det. Derfor når du sier foo.Bar.otherdata = 5;det er kompilatoren feil. Lag et objekt av struct Bar som Bar m_bar;og deretter brukeFoo.m_bar.otherdata = 5;

Svarte 27/05/2009 kl. 11:00
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more