c++ - 使用 friend 类 C++14 重新定义为不同类型的符号

标签 c++ c++14

我正在尝试为类(class)编写模板。此类在其中使用了一个 Node 类,因此我将 Node 类定义为将 List 类作为 friend 。见下文。

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;

    };

我有另一个实现类的文件。无论有没有 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;

};

关于c++ - 使用 friend 类 C++14 重新定义为不同类型的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402248/

相关文章:

c++ - Enum 不是一个 constexpr?

c++ - 为什么 C++ 没有计算函数参数的特定顺序?

c++ - 当我从虚拟基派生 D 时,为什么 VS2015 中的 sizeof(D) 增加了 8 个字节?

c++ - 为什么 std::vector 构造函数通过复制接受初始值设定项列表?

c++ - constexpr 标准仿函数的正确用法是什么?

c++ - 在 Ranges-v3 中,如何从一对迭代器创建范围?

c++ - 包含头文件语法

c++ - 为什么 BOOST 创建的这个 JSON 字符串与我的服务器所需的不同?

c++ - 由算术运算符成员函数修改的动态数组的复制构造函数

c++ - CMake 解析错误函数缺少结尾 ")"。相反,发现未终止的字符串带有文本“)