考虑这段代码:
template <typename T>
struct X{
struct Y{
unsigned i;
};
template<typename E>
struct Z : public Y {
unsigned foo(){
return i;
}
};
};
我们有一个X带有嵌套类的类模板Y和Z. Z又是一个模板并继承自Y. 因此,它也继承了字段i。但是,此代码无法编译。编译说,它无法i在foo(). Z显式前缀iwiththis->解决了这个问题。
如果我删除了外部类型X,则不再需要前缀,并且代码可以正常编译。
为什么this->这里需要这个显式前缀?