为什么不';是否在此范围内声明了下一个或上一个? 我试图在C++中重建一个DEQE,并且不能理解为什么SeaNeLe中声明的NEV和PREV不为如下: template <typename T> class ANode { public: ANode<T> * next; ANode<T> * prev; }; template <typename U> class Sentinel: public ANode<U>{ public: Sentinel(ANode<U> * n, ANode<U> * p) { next = n; prev = p; next->prev = this; prev->next = this; } Sentinel() { next = this; prev = this; } }; 模板类阳极{ 公众: 阳极*下一步; 阳极*prev; }; 模板类Sentinel:公共阳极{ 公众: 哨兵(阳极*n,阳极*p){ next=n; prev=p; 下一步->上一步=这个; 上一个->下一个=这个; } 哨兵(){ 下一个=这个; prev=这个; } };

为什么不';是否在此范围内声明了下一个或上一个? 我试图在C++中重建一个DEQE,并且不能理解为什么SeaNeLe中声明的NEV和PREV不为如下: template <typename T> class ANode { public: ANode<T> * next; ANode<T> * prev; }; template <typename U> class Sentinel: public ANode<U>{ public: Sentinel(ANode<U> * n, ANode<U> * p) { next = n; prev = p; next->prev = this; prev->next = this; } Sentinel() { next = this; prev = this; } }; 模板类阳极{ 公众: 阳极*下一步; 阳极*prev; }; 模板类Sentinel:公共阳极{ 公众: 哨兵(阳极*n,阳极*p){ next=n; prev=p; 下一步->上一步=这个; 上一个->下一个=这个; } 哨兵(){ 下一个=这个; prev=这个; } };,c++,C++,名称next和prev不在范围内,因为它们取决于模板参数U。如果要引用依赖于模板类型参数的内容,则需要使用this->对其进行限定,以声明它们是与类型相关的名称。将用法更改为this->next和this->prev,一切都应该正常 默认情况下,您将获得非依赖名称查找规则;请参阅C++11 14.6.3[temp.nondep]/1,它基本上有您的确切示例: 在上述示例中,您肯定是指Sentinel的所有用途中的阳极?。。。或者template我不相信GCC和Clang在这种情况下都没有良好的错

名称
next
prev
不在范围内,因为它们取决于模板参数
U
。如果要引用依赖于模板类型参数的内容,则需要使用
this->
对其进行限定,以声明它们是与类型相关的名称。将用法更改为
this->next
this->prev
,一切都应该正常

默认情况下,您将获得非依赖名称查找规则;请参阅C++11 14.6.3[temp.nondep]/1,它基本上有您的确切示例:


在上述示例中,您肯定是指
Sentinel
的所有用途中的
阳极
?。。。或者
template
我不相信GCC和Clang在这种情况下都没有良好的错误报告:/