C ++中的指针和引用错误

时间:2011-12-07 16:19:52

标签: c++ function pointers reference matching

当我尝试编译一个简单的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&)

我不知道我做错了什么 谢谢。

3 个答案:

答案 0 :(得分:1)

您应该将max称为:

max(*(tree.leftNode), *(tree.rightNode));

max(*(b.rightNode), tree);

因为leftNoderightNode的类型是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) );