模板类的友元类问题 (C++) (错误:'LinkedList' 不是类模板)

  • 本文关键字:LinkedList C++ 友元 问题 错误 c++
  • 更新时间 :
  • 英文 :


我试图在C++中实现一个通用链表,但我遇到了一个不知道如何处理的错误。

以下是我的Link类实现(也是通用的(:

#ifndef LINK_H
#define LINK_H
#include <iostream>
#include "typeinfo.h"
#include "LinkedList.h"
template <class T>
class Link
{
public:
//|-------------------- Constructors --------------------
Link(T data): m_data(data), next(NULL){}
//|-------------------- Methods --------------------
T getData(){
return m_data;
}
T& getNext(){
return next;
}
void setNext(Link* newLink){
next = newLink;
}
void setData(T data){
m_data = data;
}
//|-------------------- Operator overload --------------------
bool operator==(Link& other){
if(this->m_data == other.m_data)
return true;
return false;
}
void operator++(){
this = this->next;
}
//|-------------------- Friend functions --------------------
friend std::ostream& operator<<(std::ostream& out,const Link<T>& link){
out<<link.m_data;
return out;
}
//|-------------------- Destructor --------------------
virtual ~Link(){}
protected:
private:
//|-------------------- Private fields --------------------
T m_data;
Link<T>* next;
friend class LinkedList<T>
};
#endif // LINK_H

正如你所看到的,我正试图让LinkedList<T>成为Link<T>的朋友,这样我就可以访问它的领域(我希望他们保持隐私(。

现在,我认为发布我所有的LinkedList<T>实现是相关的,因为它有很多代码,但以下是我如何定义类:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include "List.h"
#include "Link.h"
template <class T>
class LinkedList : public List<T>
{
public:

以下是字段:

private:
//|-------------------- Private fields --------------------
Link<T>* head;

现在,我得到这个错误:

error: 'LinkedList' is not a class template

我已经尝试搜索错误并找到了这个。但这似乎不是我执行过程中的问题。

我也发现了这个。但我不明白在我的情况下如何实现这个转发声明(或者为什么我甚至需要它(。

我真的很感激在这里澄清。

提前感谢

只需在Link类的定义之前添加LinkedList的前向声明,如下所示:

template<typename U>
class LinkedList;
// Now the definition as you have it above...
template <class T>
class Link
{ 
public:
...

请参见此处。

顺便说一句,在你的第一个代码块中,你的朋友声明后缺少了一个;

最新更新