将侦听器类传递给函数的问题

时间:2010-06-01 21:05:32

标签: c++

我正在使用一个操纵二叉搜索树的库。在这个库中有一个遍历树的函数,并将它找到的每个节点传递给一个回调类:

bool TCODBsp::traverseInvertedLevelOrder(ITCODBspCallback *callback, void *userData)

ITCODBspCallback是库中的基类,用户应该从中派生自己的回调类以传递给函数。这是基类:

class ITCODBspCallback {
public :
    virtual bool visitNode(TCODBsp *node, void *userData) = 0;
};

这是我的派生类:

class MyCallback: public ITCODBspCallback
{
    public:
        virtual bool visitNode(TCODBsp*, void*); // defined in my implementation file
};

然后我将MyCallback传递给这样的函数:

bsp->traverseInvertedLevelOrder(new MyCallback(), NULL);

和g ++给了我以下错误:

expected type-specifier before 'MyCallback'
expected ')' before 'MyCallback'
no matching function for call to 'TCODBsp::traverseInvertedLevelOrder(int*, NULL)'
note: candidates are: bool TCODBsp::traverseInvertedLevelOrder(ITCODBspCallback*, void*)

任何人都知道什么是错的?我很好奇为什么它认为MyCallback特别是int*

1 个答案:

答案 0 :(得分:2)

这一切似乎都忘了包含MyCallback标题。由于它的解析器不会将MyCallback解释为类型,如果它不知道它是一个类型,它会提供一个自己的类型,并且忽略MyCallback(),我认为。它提供的类型是int*

请注意,您的代码会泄漏,因为您需要在任何delete'ed对象上调用new。创建这样的对象没有错:

MyCallback b;
bsp->traverseInvertedLevelOrder(&b, NULL);

在这种情况下,您可以免费使用内存管理。