考虑这段代码:
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
显式前缀i
withthis->
解决了这个问题。
如果我删除了外部类型X
,则不再需要前缀,并且代码可以正常编译。
为什么this->
这里需要这个显式前缀?