gpt4 book ai didi

c++ - 将监听器类传递给函数时出现问题

转载 作者:行者123 更新时间:2023-11-28 03:57:26 26 4
gpt4 key购买 nike

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

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'<br/>
expected ')' before 'MyCallback'<br/>
no matching function for call to 'TCODBsp::traverseInvertedLevelOrder(int*, NULL)'<br/>
note: candidates are: bool TCODBsp::traverseInvertedLevelOrder(ITCODBspCallback*, void*)

谁知道怎么回事?我很好奇它为什么认为 MyCallback是一个 int* ,特别是。

最佳答案

这一切看起来像是您忘记包含 MyCallback header 。由于它的解析器不会将 MyCallback 解释为一种类型,如果它不知道它是一个类型,它会产生一个自己的类型,并忽略 MyCallback(),我思考。它给出的类型是int*

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

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

在这种情况下,您无需进行内存管理。

关于c++ - 将监听器类传递给函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com