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

2024-04-10

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

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)


您需要证明inner类是一个typename,因为它依赖于模板参数,并且 C++ 编译器假定名称inner在这种情况下是not a type:

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

理由:名称inner上面的行取决于类型名称,t。 C++编译器此时不知道什么inner是,因为名字的意思inner可能会有所不同,具体取决于t。例如,假设在代码的其他地方,有一个专门的版本outer类为int:

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

Now, outer<int>::inner不再命名类型;它命名一个成员变量。

因此,在一般情况下的含义outer<t>::inner将是不明确的,C++ 解决了这种不明确性,假设inner does not命名一个类型。除非你这么说,否则在它前面加上前缀typename: typename outer<t>::inner。 (在这种情况下,inner被称为附属名称因为这取决于具体的类型t.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 使用内部类指针类型定义模板类的静态成员 的相关文章

随机推荐