c++ - 奇怪的类重新定义错误

标签 c++ templates

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

template <class T>
class Node {

private:

    T val;
    Node<T> * next;

public:

    friend class OList;

};

任何我的其他类(class):

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 :

friend class OList<T>;

这将要求 OList 已经声明。在 Node 的定义之前放置一个前向声明:

template <typename> class OList;

关于c++ - 奇怪的类重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898186/

相关文章:

c++ - 并行内的 set_num_threads 不起作用

c++ - Log4Cpp.properties 文件不存在错误

c++ - 在 Linux 中获取时间戳的“最便宜”方式(C++)

c++ - 隐式转换在模板类中不起作用

java - 如何在独立应用程序中使用 Java Facelets 作为通用模板引擎?

c++ - 当其中一个为负时,如何将两个 16 位值合并为一个 32 位值?

c++ - 转换运算符 template<typename T> T&&() 是否有意转换为右值?

C++ 在 int main() 之上声明模板 <Class T>

c++ - 模板类 : No default constructor

c++ - 用模板推导,std::vector<int&>可行吗?