2012-10-04 2 views
2

내가이 일을하려고했던,A의 클래스 수준의 액세스 외부 클래스의 데이터 멤버

class Outer { 
public: 
    struct inner_t { 
     void foo() 
     { 
      printf("%d", _x); 
     } 
    }; 
    int _x; 
}; 

int main() 
{ 
    Outer o; 
    o._x = 10; 
} 

오류로 컴파일 할 수 없습니다 :

error: invalid use of non-static data member ‘Outer::_x’

그러나 따라 this post, inner_t에 실제로 Outer::_x에 액세스 할 수 있습니다. 무엇이 잘못 되었나요?

답변

6

문제는 inner_tOuter의 인스턴스를 알 수 없으므로 _x을 읽습니다. 당신이 (예를 들어) 쓴 경우

는 :

void foo(const Outer *o) 
{ 
    printf("%d", o->_x); 
} 

또는 _x 경우

Outer의 정적 멤버였다. 그러면 작동합니다 (적어도 오류는 발생하지 않음).

+0

Shoot, stupid me, :-). – Alcott

2

실제로 Outer 유형의 개체 _x에 액세스 할 수 있습니다. 기본적으로 정적 인 방식으로 인스턴스 필드에 액세스하려고합니다. Outer의 인스턴스를 전달한 다음 사용하십시오.

관련 문제