C ++函数无法访问

时间:2011-06-13 22:13:36

标签: 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); //无法访问

我收到错误的地方。

5 个答案:

答案 0 :(得分:3)

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

protected表示您只能从同一个或派生的类中访问它。由于您没有指明代码的位置,我只是假设它不是那些。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

首先,它被标记为protected,因此非派生类将无法看到它。

其次,它不是静态的,它让我觉得你好像在呼唤它一样。除非你有一个名为EventableObject的对象 instance ,否则你需要一个实例引用来调用该函数,即

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

当然,除非你已经将事件添加到其他地方,否则该代码没有多大意义,但希望你能得到这个想法。

答案 3 :(得分:0)

EventableObject是一种类型。

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

答案 4 :(得分:0)

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

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