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

时间:2011-12-17 14:55:42

标签: c++ class function compilation

我已经写了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*)|

1 个答案:

答案 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*'