Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Class c++;使用类型内部类指针定义模板类的静态成员_Class_Static_Templates_Pointers_Member - Fatal编程技术网

Class c++;使用类型内部类指针定义模板类的静态成员

Class c++;使用类型内部类指针定义模板类的静态成员,class,static,templates,pointers,member,Class,Static,Templates,Pointers,Member,我有一个像这里这样的模板类(在标题中),它有一个内部类和一个指向内部类的指针类型的静态成员 template <class t> class outer { class inner { int a; }; static inner *m; }; template <class t> outer <t>::inner *outer <t>::m; 模板类外部{ 班级内部{ INTA; }; 静态内部*m;

我有一个像这里这样的模板类(在标题中),它有一个内部类和一个指向内部类的指针类型的静态成员

template <class t> class outer {
    class inner {
        int a;
    };

    static inner *m;
};

template <class t> outer <t>::inner *outer <t>::m;
模板类外部{
班级内部{
INTA;
};
静态内部*m;
};
模板外部::内部*外部::m;

当我想定义静态成员时,我在最后一行(mingw32-g++3.4.5)上说“错误:在“*”标记之前需要构造函数、析构函数或类型转换”

您需要限定
内部
类是一个类型名,因为它依赖于模板参数,C++编译器假设在这个上下文中,名称<代码>内部< /代码>不是一个类型:

现在,
outer::inner
不再命名类型;它命名一个成员变量


<> P>因此,在一般情况下,<>代码>外::内部< /代码>将是模糊的,C++解决了这种模糊性,假设>内联<代码>不命名类型。除非你说是这样,否则在前面加上
typename
typename-outer::inner
。(在此上下文中,
internal
被称为从属名称,因为它取决于
t
的确切类型)

您对空格的使用使得最后一行难以正确阅读。为了理解它的意思,我不得不认真地想了一会儿。基本上,您将属于一起的内容(类型名、模板参数、指针限定符)拆开,将不属于一起的内容(指针限定符、变量名)粘在一起。
template <class t> typename outer<t>::inner* outer<t>::m;
template <>
class outer<int> {
    int inner;
};