Нет совпадения вызова функции между классами - PullRequest
0 голосов
/ 17 декабря 2011

Я написал 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 Ответ

4 голосов
/ 17 декабря 2011

Я могу воспроизвести вашу ошибку с помощью фрагментов, приведенных ниже в этом посте.

Я предполагаю, что вы поместили предварительную декларацию не в том месте, вероятно, в глобальной области видимости около 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*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...