2014-01-15 1 views
0
class A 
{ 
     class B 
     { 
       int x; 
     } 

public: 
     void printX() { std::cout << ????; } 
} 

Как получить доступ к переменной x из функции класса A? Я не могу сделать его статическим ...Доступ к членам вложенного класса

Я пробовал все, но он либо говорит мне, что мне нужен объект, чтобы получить к нему доступ, либо компилятор не находит эту функцию.

+0

Если это не какой-то, как распределяются (статическая или экземпляр B существует), не существует способом, потому что он фактически не существует во время выполнения (или, во всяком случае, во время компиляции, кроме объявления его). – Corbin

ответ

2

он либо говорит мне нужен объект [... ]

Подумайте об этом. Потому что именно здесь проблема.

Если вы создаете экземпляр A, , вы также не получите B. Вложенный класс не является переменной-членом охватывающего класса. Это просто еще один способ изменить пространство имен класса.

Итак, вам нужен экземпляр B. Возможно, член A?

class A 
{ 
     class B 
     { 
     public: 
       int x; 
     } mB; 

public: 
     void printX() { std::cout << mB.x; } 
}; 
1

Вы никогда не объявлять экземпляра из класса B в A. Вы должны сделать что-то вроде этого:

class A 
    { 
      class B 
      { 
      public: 
        int x; 
      }; 

      B b; 

    public: 
      void printX() { std::cout << b.x; } 
    }; 
0

У вас нет. Для использования переменной x вам нужен объект. Вы могли бы, однако, сделать его статичным. Проблема с вашим примером x не является общедоступной. Размещение B внутри A не делает B частью A, оно изменяет только область B.

В этом примере это похоже на то, что вы после наследства. Это даст вам эффект вы после этого (доступа к методам и переменным всех Б, не делая объект.)

Class B 
{ 
protected: 
    int x; 
} 
Class A : B 
{ 
    void printX() { std::cout << x; } 
}