我对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)?
答案 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 {};
}