父类和内类具有相同名称时的名称解析错误

Mic*_*zek 10 c++ visual-studio-2003 token-name-resolution class-hierarchy

我对Visual Studio 2003有一个奇怪的例子.出于某些合理的原因,我有以下层次结构:

class A {};

class B : public A {
public:
    class A {};
};

class C : public B::A {};
Run Code Online (Sandbox Code Playgroud)

也就是说,我有一个内部类与外部类的父类同名.当C尝试继承时B::A,Visual Studio认为我指的是父类A,而不是内部的嵌套类B.GCC似乎按照我的预期解决了内部类版本

这是一个Visual Studio 2003错误,还是我做错了?是否有解决方法(除了升级Visual Studio)?

Jam*_*lis 5

这看起来像是Visual C++ 2003中的一个错误.使用Visual C++ 2012,B::A正确命名嵌套类A,而不是基类A.

  • @MichaelMrozek VS 2012决心进入内心阶层. (2认同)

Ros*_*ost 2

是的,这看起来像是 VS2003 的错误。解决方法很简单 - 使用 typedef,它的工作方式如下:

class A { public: int x; };
class B : public A { public: class A { public: int y; }; }; 

typedef B::A BA;

class C: public BA {};

void f()
{
   C cc;
   cc.y = 0;
}
Run Code Online (Sandbox Code Playgroud)