template< int a, int b >
struct aa {
template< int x, int y >
struct att { int axx[ a + x ][ b + y ]; };
};
struct b1 : public aa< 1, 2 > {
typedef att< 1, 2 > x;
};
template< int q >
struct b2 : public aa< 12, q > {
typedef att< 1, 2 > x;
};
b1编译没有问题(GCC 4.8),但是b2抱怨
error: 'att' does not name a type
typedef att< 1, 2 > x;
^
为什么??
最佳答案
因为在依赖基类中不查找诸如att<1,2>
之类的非依赖名称(例如aa<12,q>
,它依赖于q
)。
对于b1
,基类aa<1,2>
不是从属基数,因此一切正常。对于b2
,最简单的方法是编写typename aa<12,q>::template att<1,2>
。
有关相关引用,请参阅《 C++模板:完整指南》(Vandevoorde和Josuttis)中的9.4.2(相关基类)。
关于c++ - 无法识别继承的结构的本地声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21218254/