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

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*)


有人知道怎么了吗?我很好奇为什么它特别认为MyCallbackint*

最佳答案

看起来您都忘记了包含MyCallback标头。因为它的解析器不会在不知道MyCallback类型的情况下将其解释为一种类型,所以我认为它具有自己的类型,并且会忽略MyCallback()。它附带的类型是int*

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

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


在这种情况下,您可以释放内存管理。

09-06 17:10