C++ 使用friend类C+将其重新定义为不同类型的符号+;14
我正在尝试为一个类编写一个模板。这个类在其中使用一个Node类,因此我将Node类定义为将List类作为朋友。见下文C++ 使用friend类C+将其重新定义为不同类型的符号+;14,c++,c++14,C++,C++14,我正在尝试为一个类编写一个模板。这个类在其中使用一个Node类,因此我将Node类定义为将List类作为朋友。见下文 template <typename T> class Node { private: Node() { next = nullptr; prev = nullptr; } Node(int data) : Node() { this->data = dat
template <typename T>
class Node {
private:
Node() {
next = nullptr;
prev = nullptr;
}
Node(int data) : Node() { this->data = data; }
Node *next;
Node *prev;
int data;
friend class DoubleLinkedList;
};
template<typename T>
class DoubleLinkedList {
public:
DoubleLinkedList();
~DoubleLinkedList();
private:
Node *_head;
Node *_tail;
};
模板
类节点{
私人:
节点(){
next=nullptr;
prev=nullptr;
}
Node(int data):Node(){this->data=data;}
节点*下一步;
节点*prev;
int数据;
好友类双链接列表;
};
模板
类双链接列表{
公众:
DoubleLinkedList();
~DoubleLinkedList();
私人:
节点*头;
节点*_尾;
};
我有另一个实现类的文件。无论是否使用List类上面的模板定义,我都会遇到此错误。有人能解释一下吗?这对我很有用:
template <typename T>
class Node
{
private:
Node()
{
next = nullptr;
prev = nullptr;
}
Node(int data) : Node() { this->data = data; }
Node *next;
Node *prev;
int data;
template<typename T> friend class DoubleLinkedList;
};
template<typename T>
class DoubleLinkedList
{
public:
DoubleLinkedList();
~DoubleLinkedList();
private:
Node<T> *_head;
Node<T> *_tail;
};
模板
类节点
{
私人:
节点()
{
next=nullptr;
prev=nullptr;
}
Node(int data):Node(){this->data=data;}
节点*下一步;
节点*prev;
int数据;
模板好友类双链接列表;
};
模板
类双链接列表
{
公众:
DoubleLinkedList();
~DoubleLinkedList();
私人:
节点*头;
节点*_尾;
};
这对我很有用:
template <typename T>
class Node
{
private:
Node()
{
next = nullptr;
prev = nullptr;
}
Node(int data) : Node() { this->data = data; }
Node *next;
Node *prev;
int data;
template<typename T> friend class DoubleLinkedList;
};
template<typename T>
class DoubleLinkedList
{
public:
DoubleLinkedList();
~DoubleLinkedList();
private:
Node<T> *_head;
Node<T> *_tail;
};
模板
类节点
{
私人:
节点()
{
next=nullptr;
prev=nullptr;
}
Node(int data):Node(){this->data=data;}
节点*下一步;
节点*prev;
int数据;
模板好友类双链接列表;
};
模板
类双链接列表
{
公众:
DoubleLinkedList();
~DoubleLinkedList();
私人:
节点*头;
节点*_尾;
};
与模板交朋友时,我的经验法则是准确复制模板的签名。在这种情况下,类似于模板好友类列表代码>可能会有帮助you@alterigel上面将列出列表
的所有实例。即,列表
将拥有对节点
的完全访问权限。小心你的愿望;你可能会明白的Tiffany我们能看到真实的代码吗?我这样问是因为没有一个转发声明,Node
甚至不应该编译(它应该会出错,导致专门化一个不存在的模板类)。无论如何,在节点
模板decl之前,您应该能够转发decl列表
,就像在模板类列表中一样代码>这应该行得通。在您的例子中,诀窍是向前声明模板类列表代码>在节点之前。与模板交朋友时,我的经验法则是准确复制模板的签名。在这种情况下,类似于模板好友类列表代码>可能会有帮助you@alterigel上面将列出列表
的所有实例。即,列表
将拥有对节点
的完全访问权限。小心你的愿望;你可能会明白的Tiffany我们能看到真实的代码吗?我这样问是因为没有一个转发声明,Node
甚至不应该编译(它应该会出错,导致专门化一个不存在的模板类)。无论如何,在节点
模板decl之前,您应该能够转发decl列表
,就像在模板类列表中一样代码>这应该行得通。在您的例子中,诀窍是向前声明模板类列表代码>在节点之前。