重载运算符==但它没有被调用(比较指针?)

时间:2012-11-05 20:58:22

标签: c++

我正在尝试重载==运算符以比较两个对象。由于某种原因,永远不会调用重载的处理程序。

class gxCallback
{
public:
    virtual bool operator==(const gxCallback &aOther) const
    {
        // This is never called
        return true;
    } 
};

typedef std::vector < gxCallback* > CallbackList;

void gxObservable::Fire( gxCallback *aCallback )
{
    CallbackList::iterator iCallback;

    for ( iCallback = mCallbacks.begin(); iCallback != mCallbacks.end(); ++iCallback )
    {
        if ( aCallback == *iCallback ) // The comparison is never made via the overloaded ==
        {
            // Do something
        }
    }  
}

2 个答案:

答案 0 :(得分:8)

你在指针上调用它,而不是对象。您必须将对象与迭代器引用的对象进行比较:

if (*aCallback == **iCallback)

在取消引用它们之前,你还必须确保“指针”能够保留一些内容。

答案 1 :(得分:1)

您正在比较指针而不是对象本身。