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