Pergunta

Estou tentando acessar um membro structs variáveis, mas eu não consigo obter o direito de sintaxe. Os dois erros de compilação de pr. acesso são: erro C2274: 'estilo função de conversão': '' ilegal como lado direito operador C2228 de erro: deixou de '.otherdata' deve ter classe / struct / união Eu tentei várias mudanças, mas nenhum sucesso.

#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;
}
Foi útil?

Solução

Você só definir uma struct lá, não alocar um. Tente isto:

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 você quiser reutilizar o struct em outras classes, você também pode definir o exterior struct:

struct Bar {
  int otherdata;
};

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

Outras dicas

Bar é estrutura interna definida dentro Foo. Criação de objeto Foo não cria implicitamente os membros da Bar. Você precisa criar explicitamente o objeto de Bar usando a sintaxe Foo::Bar.

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

Caso contrário,

Criar a instância Bar como membro na 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;

Você cria uma estrutura aninhada, mas você nunca criar quaisquer instâncias do mesmo dentro da classe. Você precisa dizer algo como:

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

Você pode então dizer:

foo.bar.otherdata = 5;

Você só está declarando Foo :: Bar, mas você não instanciá-lo (não tenho certeza se essa é a terminologia correta)

Veja aqui para 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;
    };

Aqui você acabou de definir uma estrutura, mas não criou qualquer objeto dela. Portanto, quando você diz foo.Bar.otherdata = 5; é erro do compilador. Criar um objeto de struct Bar como Bar m_bar; e depois usar Foo.m_bar.otherdata = 5;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top