当父类和内部类具有相同名称时,名称解析错误
Wrong name resolution when parent and inner class have the same name
我在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 {};
}
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 错误:需要类名(链表c++)
- 将父类对象强制转换为子类的问题
- 在运行时选择父类的实现
- 如何在C++子类中访问父类的私有变量
- 将父类的子类的数据复制到具有相同父类的另一个类
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- C++ 将子类的对象添加到父类的向量中
- 两个父类的构造函数的序列
- 为什么我的子类不继承父类的字符串?
- C++调用使用重写函数的父类函数
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 错误:基类在从基类父派生类 Son 时未定义
- 当父类和内部类具有相同名称时,名称解析错误
- 无法通过可变参数函数将函数指针传递给父类中的方法--编译器错误?
- C++:包含父类时出现多定义错误
- 使用c++在父类和子类中进行继承时出现错误
- 错误:基类构造函数必须显式初始化父类构造函数