我正在使用一个操作二进制搜索树的库。这个库中有一个遍历树并将其找到的每个节点传递给回调类的函数: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*
。 最佳答案
看起来您都忘记了包含MyCallback
标头。因为它的解析器不会在不知道MyCallback
类型的情况下将其解释为一种类型,所以我认为它具有自己的类型,并且会忽略MyCallback()
。它附带的类型是int*
。
请注意,您的代码泄漏是因为您需要在任何delete
版本的对象上调用new
。创建这样的对象没有错:
MyCallback b;
bsp->traverseInvertedLevelOrder(&b, NULL);
在这种情况下,您可以释放内存管理。