在访问基类成员时,为什么我需要在以下代码中指定我的命名空间,我感到有点困惑。
在阅读标准之后,我的理解是我在.
运算符后使用的限定名称应该看::
类范围内Derived
左侧的嵌套名称说明符。
为什么找不到BaseTypeDef
但找不到Base
?
由于
(我在GCC 4.4.7和GCC 4.9.2上的行为相同。)
namespace ns {
struct Base {
int a;
};
typedef Base BaseTypeDef;
struct Derived : BaseTypeDef { };
}
int main()
{
ns::Derived d;
d.ns::BaseTypeDef::a = 0; // ok
d.Base::a = 0; // ok
d.BaseTypeDef::a = 0; // error: use of undeclared identifier 'BaseTypeDef'
return 0;
}