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;
}
Était-ce utile?

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;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top