간체 버전 :이것을 typedef하는 방법이 있습니까? 코드의
Foo.h :
class Foo {
private:
class Bar {
// ...
};
typedef std::map<int, Bar> mapType;
mapType _map;
public:
void method(mapType::iterator it);
};
foo.cpp의는 :
void Foo::method(mapType::iterator it) {
// ...
notMethod(it);
}
void notMethod(mapType::iterator it) {
// ...
}
은 당연히, 나는 notMethod
의 정의에서 VS2008에서 오류 'mapType' is not a class or namespace name
를 얻을. std::map<int, Bar>
을 입력 할 필요가 없도록 notMethod
의 정의에 notMethod
을 입력하지 않아도되는 (우아한) 방법이 있습니까?
그래,이 작품은 ... public typedef가 어느 정도 클래스 바를 공개하지는 않습니까? – suszterpatt
맞습니다. 귀하의 대안이 typedef를 대중에게 공개하는 것과 관련하여 토론 할 답변을 편집하겠습니다. –
@suszterpatt : 당신이 진정으로 비 메소드 (예 :'notMethod()')가이 반복자 매개 변수를 취할 수있게하려면 논리적으로 * typedef를 노출시켜야합니다 (따라서'Bar'). "이전의"비 - 방법으로 그러한 매개 변수를 사용할 수 없도록하려면 Martin의 다른 대안 중 하나를 사용하십시오. 또 다른 대안으로, 당신은 모든 바 멤버를 비공개로 만들 수 있고, '푸'를 '바'의 친구로 선언 할 수 있습니다. –