структура в классе - PullRequest
       3

структура в классе

14 голосов
/ 18 декабря 2011

У меня есть структура в классе, и я не знаю, как вызывать переменные из структуры, пожалуйста, помогите;)

#include <iostream>
using namespace std;

class E
{
public: 
    struct X
    {
        int v;
    };
};

int main(){

E object;
object.v=10; //not work 

return 0;
}

Ответы [ 5 ]

35 голосов
/ 18 декабря 2011

Я объявил класс B внутри класса A, как я могу получить к нему доступ?

То, что вы объявляете ваш struct B внутри class A, не означает, что экземпляр class A автоматически имеет свойства struct B в качестве членов, а также не означает, что он автоматически имеет экземпляр struct B как участник.

Не существует истинной связи между двумя классами (A и B), кроме области видимости.


struct A { 
  struct B { 
    int v;
  };  

  B inner_object;
};

int
main (int argc, char *argv[]) {
  A object;
    object.inner_object.v = 123;
}
10 голосов
/ 18 декабря 2011

Не ясно, чего вы на самом деле пытаетесь достичь, но есть две альтернативы:

class E
{
public:
    struct X
    {
        int v;
    };

    // 1. (a) Instantiate an 'X' within 'E':
    X x;
};

int main()
{
    // 1. (b) Modify the 'x' within an 'E':
    E e;
    e.x.v = 9;

    // 2. Instantiate an 'X' outside 'E':
    E::X x;
    x.v = 10;
}
2 голосов
/ 18 декабря 2011

Ваш E класс не имеет члена типа struct X, вы только что определили вложенный struct X (т.е. вы определили новый тип).

Попробуйте:

#include <iostream>

class E
{
    public: 
    struct X { int v; };
    X x; // an instance of `struct X`
};

int main(){

    E object;
    object.x.v = 1;

    return 0;
}
1 голос
/ 18 декабря 2011

Вы должны определить структуру вне класса следующим образом:

#include <iostream>
using namespace std;
struct X
{
        int v;
};
class E
{
public: 
      X var;
};

int main(){

E object;
object.var.v=10; 

return 0;
}
0 голосов
/ 18 декабря 2011

Если вы не дадите имя структуры, она будет работать

class E
{
public: 
    struct
    {
        int v;
    };
};

В противном случае напишите X x и напишите e.x.v

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...