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/

10-11 21:48