我正在使用一个操纵二叉搜索树的库。在这个库中有一个遍历树的函数,并将它找到的每个节点传递给一个回调类:
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*
。
答案 0 :(得分:2)
这一切似乎都忘了包含MyCallback
标题。由于它的解析器不会将MyCallback
解释为类型,如果它不知道它是一个类型,它会提供一个自己的类型,并且忽略MyCallback()
,我认为。它提供的类型是int*
。
请注意,您的代码会泄漏,因为您需要在任何delete
'ed对象上调用new
。创建这样的对象没有错:
MyCallback b;
bsp->traverseInvertedLevelOrder(&b, NULL);
在这种情况下,您可以免费使用内存管理。