C++ 类之间没有匹配的函数调用

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

我已经编写了两个类(数据结构课程的AVL和Stack),我正在尝试调用此函数:

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*”的转换

temp
How/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);
}