【问题标题】:Pointers and references error in C++C++中的指针和引用错误
【发布时间】:2011-12-07 16:19:51
【问题描述】:

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

如果我使用点运算符的 -> insted 我得到:

no matching function for call to A::max(A*&, A&)
candidates are: int A::max(A&, A&)

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

【问题讨论】:

  • 谢谢大家。 Mysticial的回答是最完整的一个

标签: c++ function pointers reference matching


【解决方案1】:

虽然您没有向我们展示所有类型的声明,但我怀疑这将解决问题:

tree.levels = 1 + max(*(tree.leftNode), *(tree.rightNode));
b.levels = 1 + max(*(b.rightNode), tree);

最初,当max 函数需要引用时,您正在传递指针。因此,类型不匹配会导致您的错误。所以你需要取消引用你的指针,如图所示。

【讨论】:

  • 这就是我想要的完整答案。谢谢
【解决方案2】:

您需要取消引用您的指针:

tree.levels = 1 + max(tree.leftNode, tree.rightNode);

您正在尝试将指针传递给将引用作为参数的方法。做:

tree.levels = 1 + max( *(tree.leftNode), *(tree.rightNode) );

【讨论】:

    【解决方案3】:

    你应该打电话给max

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

    因为leftNoderightNode 的类型是A*tree 的类型是A,所以没关系。

    我建议你把max的参数类型从A&改成A*,这样代码会更干净一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2015-04-21
      • 2020-08-19
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多