gpt4 book ai didi

class - c++定义具有内部类指针类型的模板类的静态成员

转载 作者:行者123 更新时间:2023-12-01 13:06:54 25 4
gpt4 key购买 nike

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

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 class 是一个类型名,因为它依赖于模板参数并且 C++ 编译器假定名称 inner在这种情况下不是一种类型:

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

理由:名称 inner在上面的行中取决于类型名称, t . C++编译器此时不知道什么 inner是,因为名字的含义 inner可能因 t而异.例如,假设在代码的其他地方,有一个专门版本的 outer int 的类(class):
template <>
class outer<int> {
int inner;
};

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

因此,在一般情况下 outer<t>::inner 的含义将是模棱两可的,C++ 解决了这种模棱两可的假设 inner不命名类型。除非你说它是,在它前面加上 typename 前缀: typename outer<t>::inner . (在这种情况下, inner 被称为从属名称,因为它取决于 t 的确切类型。)

关于class - c++定义具有内部类指针类型的模板类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com