C++ 类之间没有匹配的函数调用
我已经编写了两个类(数据结构课程的AVL和Stack),我正在尝试调用此函数:C++ 类之间没有匹配的函数调用,c++,class,function,compilation,C++,Class,Function,Compilation,我已经编写了两个类(数据结构课程的AVL和Stack),我正在尝试调用此函数:int MyStack::Push(avlnode*x) 在AVL类的函数中: trace.Push(温度) trace是一个MyStack对象 以及指向avlnode(结构)的指针。 当我试图编译代码时,我得到以下错误: 在成员函数“int MyAVLTree::Insert(int)”中: 错误:调用“MyStack::Push(MyAVLTree::avlnode*&)”时没有匹配的函数 注意:候选者是:int
int MyStack::Push(avlnode*x)
在AVL类的函数中:
trace.Push(温度)代码>
trace是一个MyStack对象
以及指向avlnode(结构)的指针。
当我试图编译代码时,我得到以下错误:
在成员函数“int MyAVLTree::Insert(int)”中:
错误:调用“MyStack::Push(MyAVLTree::avlnode*&)”时没有匹配的函数
注意:候选者是:int MyStack::Push(avlnode*)|
我可以用本文后面提供的代码片段重现您的错误
我的猜测是,您在错误的位置提出了一个forward声明,可能是在MyStack
附近的全局范围内(这样您就可以在所提到的类中使用它)
foo.cpp:在成员函数“int MyAVLTree::insert(int)”中:
foo.cpp:20:27:错误:调用“MyStack::Push(MyAVLTree::avlnode*&)”时没有匹配的函数
foo.cpp:20:27:注:候选人为:
foo.cpp:9:7:note:intmystack::Push(avlnode*)
foo.cpp:9:7:注意:没有已知的参数1从“MyAVLTree::avlnode*”到“avlnode*”的转换
tempHow/where是如何声明的?请发布一个完整的测试用例(请参阅)。可能您给函数的参数是错误的,因为您给了avlnode*&而不是avlnode*(根据编译器),错误消息似乎暗示您有两种不同的类型,称为avlnode
,其中一个在MyAVLTree的范围内,另一个不在。但是我想你会注意到如果你在两个地方完全定义了类型。你有没有试着用你的#include
做些聪明的事情?是否有可能同一类型定义在不同的范围内多次获得#include
d,或者其他什么?
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);
}