0

我目前正在尝试使用“this”指针将指针传递给函数:

void GameObject::process_events()
{
    std::vector<ObjectEvent*>::iterator it;
    for (it = events.begin(); it != events.end(); it++)
        (*it)->process(this);
}

Class ObjectEvent
{
private:
    bool* trigger;
    void (*response)(GameObject*);
public:
    process(GameObject* obj)
    {
        if (*trigger)
            response(obj);
    }
};

但我收到一个错误:

No matching function call to 'ObjectEvent::process(GameObject* const)'

可能是什么问题呢?

4

2 回答 2

5

从您的错误消息来看, process_events() 似乎实际上是一个 const 函数。

void GameObject::process_events() const
{
    process(this);
}

如果是这样,那么this是一个 const 指针,并且 process() 必须采用const GameObject *. 否则 process() 可能会修改传递给它的点,这违反了 process_events 不修改的承诺this

void process(const GameObject* obj);

或者,从 process_events() 中删除 const 修饰符。

于 2013-04-26T02:03:12.330 回答
1

如果您this从其中返回或使用thisin 的成员函数是const,那么它将是一个const指针。如果成员函数未声明为const,则指针也不会声明。

void GameObject::process_events()
{
    // ...
    process(this); // 'this' is NOT a const pointer
}

void GameObject::process_events() const
{
    // ...
    process(this); // 'this' IS a const pointer
}
于 2013-04-26T02:02:45.620 回答