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

时间:2012-08-17 16:27:53

标签: c++ visual-studio-2003 class-hierarchy name-resolution

我对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)?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

它看起来像一个VS bug,我不知道感谢发帖。
我认为解决方法将是SafeInherit模板我不知道什么会更好名称。

template <typename T>
struct SafeInherit{
  typedef T Type;
};

class B : public SafeInherit<A>::Type {
  public:
  class A {};
}