我已经在这个问题上花了很多时间来摆弄我的拇指。我正在尝试使用两个不同的分配器为节点及其指向的类型实现单个链表。以下代码使我一直提示我在SingleListNode定义中部分地专门说明了 friend 类声明:

namespace containers {
template<typename T, typename TAlloc,
typename NAlloc>class SingleList; // forward declaration

template<typename T, typename TAlloc = std::allocator<T>>
class SingleListNode {
    template<typename T1, typename T2, typename T3>
    friend class SingleList<T1, T2, T3> ; // partially specialized???
    // class definition
};

template<typename T, typename TAlloc = std::allocator<T>,
        typename NAlloc = std::allocator<SingleListNode<T>>>
class SingleList {
    // class definition
};
} // end of namespace containers

一直告诉我:



据我所知,这不是专业。也许这是GCC编译器中的错误?否则,我要去哪里错了?

最佳答案

您正在声明模板化的 friend 类,因此正确的语法是

 template<typename T1, typename T2, typename T3>
 friend class SingleList;

<T1, T2, T3>之后没有SingleList
例如,参见“实际用法示例” here

关于c++ - 我要宣布部分专门的 friend 类吗? - 很迷惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8418334/

10-13 08:15