2017-09-06 62 views
1

我的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

如果你想的linked实例化具有相同的模板参数T是朋友,你需要在转发首先声明类模板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 { 
    ... 
}; 
0

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

template <typename T> 
class linked; 
1

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

template <typename T> 
class linked; 

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