같은 이름을 가진 중첩 클래스와 멤버 함수를 찾았습니다. 나는 주위에 방법을 찾고 있었다같은 이름을 가진 중첩 된 클래스와 멤버 함수
class Foo
{
public:
class Lock
{
// Operations that require the lock...
};
Lock Lock() noexcept {return Lock;}
};
이 이해할 수 있도록 작동하지 않았고 시도 : 멤버 함수는 중첩 된 클래스의 인스턴스를 반환하기위한 것입니다
return typename Foo::Lock();
이것은 g에 괜찮 았는데 ++ 4.7 및 4.8하지만 3.4 ++ 그 소리에 실행할 때 내가 얻을 오류 : error: typename specifier refers to non-type member 'Lock' in 'Foo'
C++ 11 : 'error: typename specifier refers to non-type member 'Lock' in 'Foo'
C++ (11)없이이것은 내 질문에 이릅니다 :
- 이 중 어느 것이 맞습니까?
- 예제와 같이 멤버 함수에서 중첩 클래스를 참조 할 수 있습니까?
해결 방법을 이용해 주셔서 감사합니다. 정확성에 관해서는 위의 표준에 해당하는 부분을 가리킬 수 있다면 : – DrYap
실제로 올바른 부분은 C++ 11 드래프트 표준 초안에서 '9.1'입니다. –
정교한 형식 지정자를 사용하는 것뿐만 아니라'::'을 사용하여 클래스 이름에 액세스 할 수 있습니다 (표준에는 "두 선언이 모두 범위에있을 때"라는 의미로 사용됨). "이름이 정규화되지 않은 조회 ").이것은 유효합니다 :'foo :: Lock :: bar();','bar'는 Lock 중첩 클래스의 멤버 함수입니다. –