我已经写了2个课程(我的数据结构讲座的AVL和Stack),我正在尝试调用此功能:
int MyStack::Push(avlnode *x)
在AVL类的功能中:
trace.Push(temp);
trace是一个MyStack对象
并指向avlnode(这是一个结构)的指针。
当我尝试编译代码时,我收到以下错误:
In member function 'int MyAVLTree::Insert(int)':
error: no matching function for call to 'MyStack::Push(MyAVLTree::avlnode*&)'
note: candidates are: int MyStack::Push(avlnode*)|
答案 0 :(得分:4)
我可以使用本文后面提供的片段重现您的错误。
我的猜测是你在一个错误的位置放了一个前向声明,可能在MyStack
附近的全局范围内(这样你就可以在上面提到的类中使用它了。)
class avlnode;
struct MyStack {
int Push (avlnode *) {return 0;}
};
...
struct MyAVLTree {
struct avlnode {
/* ... */
};
MyAVLTree (MyStack& a)
: a (a)
{}
int insert (int) {
avlnode * p; a.Push (p);
return 0;
}
MyStack& a;
};
...
int main(int argc, char* argv[])
{
MyStack a;
MyAVLTree b (a);
b.insert (123);
}
...
foo.cpp: In member function 'int MyAVLTree::insert(int)':
foo.cpp:20:27: error: no matching function for call to 'MyStack::Push(MyAVLTree::avlnode*&)'
foo.cpp:20:27: note: candidate is:
foo.cpp:9:7: note: int MyStack::Push(avlnode*)
foo.cpp:9:7: note: no known conversion for argument 1 from 'MyAVLTree::avlnode*' to 'avlnode*'