当父类和内部类具有相同名称时,名称解析错误

Wrong name resolution when parent and inner class have the same name

本文关键字:错误 父类 内部类      更新时间:2023-10-16

我在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之外)?

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

是的,这看起来像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;
}

它看起来像一个VS错误,
我不知道谢谢你的发布
我认为解决方法是SafeInherit模板,我不知道什么名称更好。

template <typename T>
struct SafeInherit{
  typedef T Type;
};
class B : public SafeInherit<A>::Type {
  public:
  class A {};
}