Wrong name resolution when parent and inner class have the same name
-
27-06-2021 - |
سؤال
I have an odd case with Visual Studio 2003. For somewhat legitimate reasons, I have the following hierarchy:
class A {};
class B : public A {
public:
class A {};
};
class C : public B::A {};
That is, I have an inner class with the same name as a parent of the outer class. When C
tries to inherit from B::A
, Visual Studio thinks I'm pointing to the parent class A
, not the nested class within B
. GCC seems to resolve to the inner class version as I expected
Is this a Visual Studio 2003 bug, or am I doing it wrong? Is there a workaround (other than upgrading Visual Studio)?
المحلول
Yes, this looks like VS2003 bug. Workaround is simple - use typedef, it works this way:
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;
}
نصائح أخرى
This looks like a bug in Visual C++ 2003. Using Visual C++ 2012, B::A
correctly names the nested class A
, not the base class A
.
It looks like a VS bug,
I didn't know Thanks for posting.
I think The workaround will be a SafeInherit
Template I don't know what will be a better name.
template <typename T>
struct SafeInherit{
typedef T Type;
};
class B : public SafeInherit<A>::Type {
public:
class A {};
}