奇怪的类重新定义错误

Weird Class Redefinition Error

本文关键字:定义 错误 新定义      更新时间:2023-10-16

我有一个奇怪的错误,说我的类正在被重新定义,这源于我的Node类中友元的声明。这是我当前的代码:

template <class T>
class Node {
private:
    T val;
    Node<T> * next;
public:
    friend class OList;
};

我的其他班级:

template <class T>
class OList {  ------> Error here
private:
    Node<T> * head;
    int size;
public:
    OList();
    OList(const OList<T> &b);
    ~OList();
    clear();
    int size();
    T tGet(int input);
    int count(T input);
    insert (T input);
    remove (T input);
    uniquify(T input);
    Node<T> * returnHead();
};
// Constructs empty list
template <class T>
OList<T>::OList() { ---> Error here
    head = NULL;
    size = 0;
}

OList不是类,它是类模板。你可以朋友的模板的所有专业:

template <typename> friend class OList;

或朋友一个特定的专业:

friend class OList<T>;

这将需要已经声明CCD_ 2。在定义Node:之前提出正向声明

template <typename> class OList;

此外,友元声明不能引用部分专门化。

来源:https://en.cppreference.com/w/cpp/language/friend