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

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

어떻게 A 클래스 함수에서 x 변수에 액세스 할 수 있습니까? 나는 그것을 정적으로 만들 수는 없다. ...중첩 클래스의 멤버에 액세스

나는 모든 것을 시도했지만, 접근하기 위해 객체가 필요하다는 것을 알았거나 컴파일러가 함수를 찾지 못했다.

+0

할당 된 방법 (정적 또는 B의 인스턴스가 존재하지 않는 한) 왜냐하면 런타임에 실제로 존재하지 않기 때문입니다 (또는 컴파일 타임에 선언 할 때 이외에). – Corbin

답변

2

을가 하더군요 중 내가 객체를 [필요 ... ]

생각해보십시오. 그게 문제가 정확히 여기에 있기 때문입니다.

A, 을 인스턴스화하면 B도 표시되지 않습니다. 중첩 된 클래스는 둘러싼 클래스의 멤버 변수가 아닙니다. 이것은 실제로 클래스의 네임 스페이스를 변경하는 또 다른 방법입니다.

따라서 B의 인스턴스가 필요합니다. 아마도 A의 회원입니까?

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

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

혹시 당신은 같은 것을 할 필요가 A. 내부 클래스 B의 예를를 선언하지 않습니다

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

      B b; 

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

그렇지 않습니다. x 변수를 사용하려면 객체가 필요합니다. 그러나 정적으로 만들 수 있습니다. 귀하의 예제에 문제가 x는 공개되지 않습니다. B를 A 안에 배치하면 A의 B 부분이되지 않고 B의 범위 만 변경됩니다.

이 예제에서 당신은 상속을받은 것 같아 보입니다. 이것은 당신이 가진 효과를 줄 것입니다 (객체를 만들지 않고 모든 B의 메서드와 변수에 액세스).

관련 문제