2011-06-13 5 views
1

이 함수에 액세스 할 수없는 이유가 궁금합니다.C++ 함수에 액세스 할 수 없습니다.

함수 : 여기

class SERVER_DECL EventableObject 
{ 

protected: 
    void RemoveEvent(TimedEvent * ev); 
}; 

난이 무엇인가

Event * ReadyUp; 
void Start() 
{ 
    static uint8 Tick = 1; 

    if(Tick == 1) 
    { 
     NormalMessage("Starting Event.."); 
    } 
    EventableObject.RemoveEvent(this->ReadyUp); // Inaccessible 
} 

EventableObject.RemoveEvent (this-> BattlefieldReadyUp); // 액세스 할 수 없음

어디서 오류가 발생합니까?

+1

클래스 정의에서'protected :'를'public :'으로 변경하십시오; 잠재적으로'RemoveEvent' static을 당신이 의도 한 것이라면 만들어라. – phooji

+2

막연하게 C++과 비슷한 코드를 게시 해주세요. –

답변

3

public 대신 protected이기 때문에 액세스 할 수 없습니다.

protected은 동일한 클래스 또는 파생 클래스에서만 액세스 할 수 있음을 의미합니다. 코드의 위치를 ​​표시하지 않았으므로 그 코드가 아닌 것으로 가정합니다.

+1

정적이 아닌 메서드에서 ClassName.MethodName을 수행하는 문제가 있습니다. – phooji

1

protected C++의 함수는 클래스 자체가 아니라 클래스 외부에서 파생 클래스에만 액세스 할 수 있으므로 함수에 액세스 할 수 없다는 오류 메시지가 나타납니다.

1

우선, protected으로 표시되므로 파생되지 않은 클래스에는 표시되지 않습니다.

둘째로, 정적이 아니며, 마치 마치 마치 마치 마치 마치 전화를하는 것처럼 보입니다. 당신이 객체가없는 한 예를 주위이라는EventableObject 당신은 기능, 즉,

물론
EventableObject ev; 
ev.RemoveEvent(this->ReadyUp); 

, 그 코드는 이미 다른 곳에서 이벤트를 추가했다하지 않는 한 거의 의미를 호출하는 인스턴스의 참조가 필요하지만, 잘하면 아이디어를 얻으십시오.

0

EventableObject은 유형입니다.

멤버 함수를 호출하려면 해당 유형의 객체가 필요합니다.

+0

메소드가'protected'로 선언 되었기 때문에 여전히 작동하지 않는 것 –

0

EventableObject::RemoveEventstatic으로 선언되지 않았습니다. 즉, EventableObject::RemoveEvent을 호출하려면 EventableObject 유형의 객체가 필요합니다.

EventableObject::RemoveEventprotected으로 표시됩니다. 즉, 클래스 EventableObject 및 파생 클래스 내에서만 호출 할 수 있습니다. 다른 위치에서 전화해야하는 경우 public으로 지정하십시오.

+0

감사합니다. 이전에 공개했는데 오류가 발생했지만 지금은 작동하고 싶습니다. : / – user795232

관련 문제