Функция предоставляет функции вызовов, расположенные в разных классах, с функцией height()
, находящейся в классе, который объявляет AVLTree
в качестве друга. Тем не менее, у меня возникли проблемы с вызовом функции height()
. Функция isExternal()
является прямым членом класса TPos
, но height()
не является (однако, он является другом класса AVLTree
, который наследует класс, которому принадлежит isExternal()
).Доступ к защищенному члену из класса друзей
template <typename T>
int AVLTree<T>::height(const TPos& v) const {
return (v.isExternal() ? 0 : v->height());
}
Когда я компилирую с помощью Xcode, я получаю следующее сообщение об ошибке:
Member reference type 'const TPos' (aka 'const BinaryTree<AVLEntry<Entry<std::__1::basic_string<char>, std::__1::basic_string<char> > > >::Position') is not a pointer; maybe you meant to use '.'?
Проблема заключается в том, что оператор точка прицелы неправильно. Я знаю, что это, вероятно, тривиально, но уже поздно, и я застрял. Предложения?
Не следует ли 'v-> height' быть' v.height'? Указатель 'TPos'? Использует ли он 'operator->'? –
№ Функция высоты не находится в пределах этого класса. Я пытаюсь получить доступ к члену, находящемуся внутри класса, который объявил это как класс друга. – badfilms
Имеет ли 'TPal' функцию-член под названием' height'? Вызывает ли класс 'TPal'? Код 'v-> height()' имеет смысл только в том случае, если 'TPal' является типом указателя или реализует' operator-> '. Если нет, это не имеет смысла. Чтобы исправить это, нам нужно было знать, что вы пытаетесь сделать. Какой объект реализует функцию под названием 'height'? –