Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用c++;模板类中的模板typedef_C++_Templates_Typedef - Fatal编程技术网

C++ 如何使用c++;模板类中的模板typedef

C++ 如何使用c++;模板类中的模板typedef,c++,templates,typedef,C++,Templates,Typedef,我想定义一个模板类型,并在第二个模板类中使用该类型 首先,我用helper结构定义了typedef template<class T> struct MyList { typedef std::map<int, T> Type; }; 模板 结构MyList{ typedef std::映射类型; }; 然后在第二个模板中使用它: template <class T> class MySecondClass { public:

我想定义一个模板类型,并在第二个模板类中使用该类型

首先,我用helper结构定义了typedef

template<class T>
struct MyList {
   typedef std::map<int, T> Type;  
};
模板
结构MyList{
typedef std::映射类型;
};
然后在第二个模板中使用它:

 template <class T>
    class MySecondClass {
    public:
       MySecondClass(MyList<T>& list) : list_(list) {}
    private:
       MyList<T>::Type list_;   
   };
模板
类MySecondClass{
公众:
MySecondClass(MyList&list):列表{(list){}
私人:
MyList::类型列表;
};

不幸的是,
MyListT&list
不起作用并产生错误。

MyList::Type
MyList
的类型不同,您将它们混合在
MySecondClass
中。另外,您可能需要在最后一次声明中添加
typename
前缀。

我想这就是您想要的:

template <typename T>
 class MySecondClass {
    public:
       MySecondClass(typename MyList<T>::Type& list) : list_(list) {}
    private:
       typename MyList<T>::Type& list_;   
  };
模板
类MySecondClass{
公众:
MySecondClass(typename MyList::Type&list):list(list){}
私人:
typename MyList::Type&list;
};

您能发布错误吗?首先我得到一个警告:c4346依赖名称不是类型,然后是错误C2146 syntax.plz在编译器/链接器生成时发布完整错误(行+消息)。对于任何有关错误/警告的问题,都应该这样做错误C2146:语法错误:缺少“;”在标识符列表\之前,您缺少一个;。请看第二个代码块中的4行。这只是一个输入错误,我已经输入了MyList::Type。问题是一样的。我只能将这个typedef用于像MyList int::type list\ux;但这不是我想要的,我想要一个普通的T型。太好了,就是这样!你能解释一下,在MyList前面使用typename这个词有什么区别吗?