10

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

4

3 回答 3

5

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

于 2012-08-17T16:35:09.620 回答
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;
}
于 2012-08-17T16:46:16.973 回答
0

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

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

class B : public SafeInherit<A>::Type {
  public:
  class A {};
}
于 2012-08-17T16:45:19.340 回答