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

我有一个奇怪的情况与Visual Studio 2003.由于某些合法的原因,我有以下层次结构:
class A {};

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

class C : public B::A {};

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

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

解决方法

是的,这看起来像VS2003的bug.解决方法很简单 – 使用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;
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...