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

c++ defining a static member of a template class with type inner class pointer

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

1
2
3
4
5
6
7
8
9
template <class t> class outer {
    class inner {
        int a;
    };

    static inner *m;
};

template <class t> outer <t>::inner *outer <t>::m;

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


您需要限定EDCOX1×0类是一个类型名,因为它依赖于模板参数,C++编译器假定在该上下文中EDCOX1 OR 0的名称不是一个类型:

1
template <class t> typename outer<t>::inner* outer<t>::m;

理由:上述行中的名称inner取决于类型名称t。C++编译器在这一点上不知道EDOCX1 0是什么,因为inner的含义可以根据EDCOX1×3的不同而不同。例如,假设在代码中的其他地方,有一个针对intouter类的专门版本:

1
2
3
4
template <>
class outer<int> {
    int inner;
};

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

因此,在一般情况下,EDCOX1〔10〕的含义是模棱两可的,而C++则解决了这种模糊性,假设EDCOX1〔0〕不命名类型。除非你说是这样,在它前面加上typenametypename outer::inner。(在本文中,inner被称为从属名称,因为它取决于t的确切类型。)