2011-06-13 402 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(这个 - > BattlefieldReadyUp); // Inaccessible

是我遇到错误的地方。

+1

在您的类定义中将'protected:'更改为'public:';如果这是你想要的,可能会使'RemoveEvent'静态。 – phooji 2011-06-13 22:15:00

+2

请尝试发布代码模糊地类似于C++ – 2011-06-13 22:17:00

回答

3

这是无法访问,因为它是protected而不是public

protected表示您只能从相同的派生类中访问它。既然你没有说明你的代码在哪里,我只是假设它不是那些。

+1

还有一个问题,在非静态方法上做ClassName.MethodName,我想。 – phooji 2011-06-13 22:17:19

1

A protected C++中的函数只能由类本身和派生类访问,而不在类的外部,因此您会收到错误消息,指出函数无法访问。

1

首先,它被标记为protected,所以它对于非派生类将不可见。

其次,它不是静态的,它在我看来好像你在调用它一样。除非你有一个对象实例围绕名为EventableObject你需要一个实例引用调用的函数,即

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

当然,该代码没有什么意义,除非你已经加入其他地方的事件,但希望你明白了。

0

EventableObject是一种类型。

您需要该类型的对象才能够调用成员函数。

+0

这仍然不会工作,因为该方法被宣布为“受保护” – 2011-06-13 22:52:53

0

EventableObject::RemoveEvent未声明static。这意味着您需要EventableObject类型的对象才能拨打EventableObject::RemoveEvent

EventableObject::RemoveEvent宣布为protected。这意味着它只能从类EventableObject本身和派生类中调用。如果您必须从其他位置拨打电话,请将其设为public

+0

感谢所有,我把公开之前,我收到一个错误,但它现在想工作,哈哈。 :/ – user795232 2011-06-13 22:29:46