VS编写C++ LinkList类模板报class template has already been declared as a non-class template错误
错误直接原因
你在Node.h中声明LinkList为友元的时候,没有指定它是模板类,编译器会默认认为存在一个非模板类型的全局LinkList类,后续你在LinkList.h中定义模板版本的LinkList时就会触发冲突,报「class template has already been declared as a non-class template」错误。
修正方案
将Node.h中的友元声明改为模板友元,修改后的Node.h代码如下:
#ifndef NODE_H #define NODE_H // 提前声明LinkList是模板类,否则友元声明无法识别 template <typename T> class LinkList; template <typename T> class Node { // 声明对应模板实例的LinkList为友元 friend class LinkList<T>; public: // 构造函数 Node() : data(T()), next(nullptr) {} Node(T dataIn) : data(dataIn), next(nullptr) {} private: // 数据成员 T data; Node<T>* next; }; #endif
其他需要修正的语法问题
你的代码还有几处语法错误,修改完友元问题后还需要调整以下内容才能正常编译:
LinkList.tem中赋值运算符operator=结尾缺少返回语句,补return *this;LinkList.tem中remove函数的for循环步进错误,把for (previous = first; previous != nullptr; previous->next)改为for (previous = first; previous->next != nullptr; previous = previous->next),同时要补充previous走到末尾没找到元素的判断,避免空指针访问LinkList.tem中writeFile函数的outFS.close()后面缺少分号LinkList.tem中at函数的return temp后面缺少分号LinkList.tem中getRandomItem函数的return语句后面缺少分号
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

