Я работаю над классом связанного списка, который содержит частный класс вложенных узлов. Я хочу продвинуть n узлов вперед в моем списке, используя оператор перегруженного сложения, но clang дает мне ошибку «перегруженный» оператор + 'должен быть унарным или двоичным оператором (имеет 3 параметра) ». Я думал, что неявный этот параметр исчез, когда вы объявили его как функцию друга.Перегрузка оператора добавления для указателей на вложенные классы
Первый мой файл заголовка
template <class T>
class List
{
private:
class ListNode
{
public:
ListNode();
ListNode(const T& ndata);
friend ListNode* operator+(const ListNode* &node, int n);
ListNode* next;
ListNode* prev;
};
public:
friend ListNode* operator+(const ListNode* &node, int n);
и моя реализация выглядит следующим образом:
template <class T>
typename List<T>::ListNode* List<T>::ListNode::operator+(const ListNode* &node, int n)
{
ListNode* current = node;
while (n--){
if (current->next != 0)
current = current->next;
}
return current;
}
Жаль, что ошибка была неправильной. Возобновлено. – NathanOliver
Друг-функция на самом деле не является членом, поэтому вы не можете определить ее вне линии таким образом. На самом деле единственный разумный способ определения таких функций является встроенным. –