Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用friend类C+将其重新定义为不同类型的符号+;14_C++_C++14 - Fatal编程技术网

C++ 使用friend类C+将其重新定义为不同类型的符号+;14

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

我正在尝试为一个类编写一个模板。这个类在其中使用一个Node类,因此我将Node类定义为将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;

        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
列表
,就像在
模板类列表中一样这应该行得通。在您的例子中,诀窍是向前声明
模板类列表在节点之前。