这是我的代码:
#include<iostream>
using namespace std;
template<typename T>
struct Doublenode{
T data;
struct Doublenode<T>* prev;
struct Doublenode<T>* next;
};
template<typename T>
using Double_node = typename Doublenode <T>::Double_node;
template<typename T>
using DoubleNodePtr = typename Double_node <T>* ::DoubleNodePtr;
这给了我以下错误:
错误:预期的嵌套名称说明符 使用DoubleNodePtr = typename(^)Double_node * :: DoubleNodePtr;
设计模板化结构指针的正确方法是什么?
答案 0 :(得分:1)
using
类型别名的语法,无论是否模板化,如下所示:
using <alias name> = <existing type name>;
您正在将其编写为
using <alias name> = <existing type name> :: <alias name>;
如果<existing type name>
的成员类型名为<alias name>
,可以正常工作。但总的来说它不正确。最终,你的问题似乎是误解了所需的语法。哪个适用于您的帖子只是:
template<typename T>
using Double_node = Doublenode<T>;
答案 1 :(得分:1)
template<typename T> using DoubleNodePtr = typename Double_node <T>* ::DoubleNodePtr;
指针类型没有成员或范围,因此您无法在指针上应用范围解析运算符。
template<typename T> using Double_node = typename Doublenode <T>::Double_node;
Doublenode
没有名为Double_node
的成员,因此只有在您打算专门化Doublenode
并且这些专业化有该成员时,这才是明智的。
C ++ - 如何设计模板化的结构指针?
像这样:
template<typename T>
using DoubleNodePtr = Double_node<T>*;
但是,为指针创建类型别名通常是个坏主意。不要这样做。
答案 2 :(得分:0)
template<typename T>
using Double_node = Doublenode<T>;
template<typename T>
using DoubleNodePtr = Double_node<T>*;