【发布时间】:2013-03-01 11:03:41
【问题描述】:
假设情况。
struct Top
{
int x;
};
struct Left : public Top
{};
struct Right : public Top
{};
struct Bottom : public Left, public Right
{
void foo()
{
Left::x; // Normal compiled
}
void goo()
{
Left::Top::x; // error: ‘Top’ is an ambiguous base of ‘Bottom’ // Why --- ????
}
};
有人能解释一下为什么在函数 goo() 编译器中会出现歧义错误吗?
我写了 void foo() 来表明如果我通过限定符 Left::x; 访问 x;没有歧义,所以为什么当我使用更详细的访问限定符 Left::Top::x;出现歧义?
【问题讨论】:
-
顺便说一句,我在 Visual Studio 2012 中尝试了这段代码(默认编译器设置)并编译了它。但是 gcc - 4.6 ( ubuntu ) 给出了这个错误。据我了解,这是 gcc - 4.6 问题,还是???我不知道,如果有人对此有所了解,请写下答案。
标签: inheritance ambiguity qualifiers