当我尝试编译一个简单的AVL树程序时,我得到了这些错误:
no matching function for call to A::max(A*&, A*&)
candidates are: int A::max(A&, A&)
request for member 'levels' in 'b', wich is of non-class type 'A*'
以下是导致问题的方法:
void A::simpleLeftRotation(A & tree){
A* b = tree.leftNode;
tree.leftNode = b->RightNode;
b->rightNode = &tree;
tree.levels = 1 + max(tree.leftNode, tree.rightNode); // Problem 1
b.levels = 1 + max(b.rightNode, tree); // Problem 2
tree = b;
}
以下是我的班级成员:
A* righNode;
A* leftNode;
int levels;
int element;
在行中:
b.levels = 1 + max(b.rightNode, tree);
如果我使用 - >我得到了点操作员:
no matching function for call to A::max(A*&, A&)
candidates are: int A::max(A&, A&)
我不知道我做错了什么 谢谢。
答案 0 :(得分:1)
您应该将max
称为:
max(*(tree.leftNode), *(tree.rightNode));
max(*(b.rightNode), tree);
因为leftNode
和rightNode
的类型是A*
。 <{1}}的类型为tree
,所以没关系。
我建议您将A
的参数类型从max
更改为A&
,因为它会使代码更加干净。
答案 1 :(得分:1)
虽然您没有向我们展示所有类型的声明,但我怀疑这会解决问题:
tree.levels = 1 + max(*(tree.leftNode), *(tree.rightNode));
b.levels = 1 + max(*(b.rightNode), tree);
最初,当max
函数需要引用时,您正在传递指针。因此,类型不匹配会导致您的错误。因此,您需要取消引用您的指针,如图所示。
答案 2 :(得分:1)
你需要取消引用你的指针:
tree.levels = 1 + max(tree.leftNode, tree.rightNode);
您正在尝试将指针传递给将引用作为参数的方法。做:
tree.levels = 1 + max( *(tree.leftNode), *(tree.rightNode) );