C++模板继承不会看到基类成员

Pet*_*ter 0 c++ inheritance

请看下面的代码:

template<class MT>
class ClassA {
public:
  int cnt;
};

template<class MT>
class ClassB : public ClassA<MT> {
public:

   void test() {
     cnt++ ;
   }
};
Run Code Online (Sandbox Code Playgroud)

编译时,g ++会给出一个错误,即"cnt"未在范围内声明.

如果我将cnt更改为this-> cnt,它就可以了.但是,我很困惑.有人可以解释为什么它不起作用?

Mar*_*k B 5

原因是它cnt不是一个依赖名称(不依赖于模板参数),因此语言规则必须用this->或者用它来限定它base::.