C ++使用“this”指针作为普通指针

时间:2013-04-26 01:55:57

标签: c++ pointers this

我目前正在尝试使用“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)'

可能是什么问题?

2 个答案:

答案 0 :(得分: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修饰符。

答案 1 :(得分:1)

如果您从<{1}}输入this或使用this的成员函数是 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
}