Ошибка указателей и ссылок в C ++ - PullRequest
2 голосов
/ 07 декабря 2011

Я получаю эти ошибки, когда пытаюсь скомпилировать простую программу дерева 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&)

Я не знаючто я делаю не так.
Спасибо.

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Хотя вы не показывали нам декларации для всех типов, я подозреваю, что это решит проблему:

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

Изначально вы передавали указатели, когда функция max ожидает ссылки. Следовательно, несоответствие типов приводит к вашим ошибкам. Поэтому вам нужно разыменовать ваши указатели, как показано.

1 голос
/ 07 декабря 2011

Вам нужно разыменовать ваши указатели:

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

Вы пытаетесь передать указатели на метод, который принимает ссылки в качестве параметров.Do:

tree.levels = 1 + max( *(tree.leftNode), *(tree.rightNode) );
1 голос
/ 07 декабря 2011

Вы должны назвать max как:

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

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

Поскольку тип leftNode и rightNode равен A*.Тип tree - A, так что все в порядке.

Я бы предложил вам изменить типы параметров max с A& на A*, так как это сделало бы коднемного более чистый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...