2011-03-28 7 views
0

이것은 cocos2d 질문이 아니지만 Objective-C 질문에 대한 것입니다.cocos2d CCMenu는 오류없이 기본 클래스의 private 멤버 변수에 어떻게 액세스합니까?

CCNode와 CCMenu의 두 클래스가 있습니다. CCNode는 CCMenu의 조상입니다. CCMenu는 CCNode의 private 멤버 변수 children_에 직접 액세스하지만 오류 (또는 경고)는받지 않습니다.

우리는 CCMenu를 서브 클래스로 만들려고 할 때이 문제를 발견했고 파생 클래스에서 children_에 액세스하는 비슷한 작업을 수행했습니다. 시뮬레이터 용으로 빌드 할 때 Xcode가 오류를 던지지 않았지만 'children_'을 선언하지 않은 오류가 발생했습니다. (어떤 의미가 있습니다!)

그래서 난 정말 혼란 스러워요 .. 그것을 관련 설정을 어떤 컴파일러처럼 보이지 않는 (적인 Cocos2D 어떻게 든 위해 아무 문제없이 컴파일합니다.)

답변

0

CCNode 헤더를 보면, children_ 비공개로 보이지 않습니다. CCNode 인터페이스에는 가시성 수정자가 없으며 기본값은 @protected이므로 인스턴스 변수 이 CCNode의 하위 클래스에 표시되어야합니다.

+0

감사합니다. 나는 그것이 사적인 것이라고 생각했다. 그래서 그것은 내 실수 다. 그런 다음 CCMenu 파생 클래스의 컴파일 오류를 어떻게 설명 할 수 있습니까? 그것은 여전히 ​​이해가 안되는 것 같습니다. – Todd

+0

음 ... 나는 오버라이드되지 않은 메소드에서 children_에 액세스하면이 오류가 발생하는 것으로 나타났습니다. 재정의 된 메서드에서이 메서드에 액세스하려고하면 오류가 없습니다. 비슷한 동작을 C++에 기대했지만, 그렇지 않은 것 같습니다. @protected 멤버가 어떻게 작동해야합니까? – Todd

+0

지금 혼란스러워지고 있습니다. 간단한 기본 클래스 및 파생 클래스를 작성하고 잘 컴파일됩니다. 그 특정 CCMenu에서 파생 된 클래스가 왜 오류를 던지는지 모르겠다. 자세한 정보는 파생 클래스에서 (CCMenuItem *) itemForTouch : (UITouch *) touch (구현 너무)를 복제하고 children_이 오류를 가져온다. – Todd

관련 문제