如何将模板实例化声明为我班级的朋友?

时间:2017-09-06 00:54:44

标签: c++ templates friend

我的node课程需要相应的linked课程才能成为朋友。我把它写成

template <typename T>
class node{
    T value;
    node<T> *next;
    friend class linked<T>;
};

template <typename T>
class linked{
    linked();
    ~linked();
    node<T> *head;
};

我收到编译错误,抱怨linked不是类模板。如何声明linked<T>成为node<T>的朋友?

3 个答案:

答案 0 :(得分:3)

如果您想使用相同的模板参数linkedT的实例化作为朋友,则需要首先转发声明类模板linked

// forward declaration
template <typename T>
class linked;

template <typename T>
class node {
    ...
    friend class linked<T>; 
    // or since C++11 you can
    friend linked<T>; 
};

template <typename T>
class linked {
    ...
};

答案 1 :(得分:1)

在Node类中使用它之前,必须声明如下链接的类。但是你的代码看起来比这个问题更麻烦。而且我不确定你究竟在尝试什么。

template <typename T>
class linked;

template <typename T>
class node{
    private:
    T value;
    node<T> *next;
    friend class linked<T>;
};

答案 2 :(得分:0)

错误是语句friend class linked<T>;出现的地方,linked类尚未声明。在class node之前添加以下内容。

template <typename T>
class linked;