为什么错误发出两次?

时间:2010-08-20 03:53:40

标签: c++ gcc g++

完全清楚,我问的问题超出了C ++标准的范围,我很想知道为什么GCC两次抛出相同的错误?我知道为什么会出现错误,但我正在寻找理解错误消息中重复的原因。

#include <iostream>
using namespace std;

struct A{
   virtual void f1() = 0;
};

struct B : A{
};

struct C : A{
   void f1(){}
};

struct D : C, B{
   void f2(){f1();}
};

int main(){}

错误:

prog.cpp: In member function ‘void D::f2()’:
prog.cpp:16: error: reference to ‘f1’ is ambiguous
prog.cpp:5: error: candidates are: virtual void A::f1()
prog.cpp:12: error:                virtual void C::f1()
prog.cpp:16: error: reference to ‘f1’ is ambiguous
prog.cpp:5: error: candidates are: virtual void A::f1()
prog.cpp:12: error:                virtual void C::f1()

3 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的G ++?

有趣的是,使用Apple的G ++ 4.2.1编译您在MacOS X 10.6.4上显示的代码,我收到了双重错误消息。

使用我自己构建的G ++ 4.5.1,我只收到一个警告。

看起来已经修复了一个错误。

答案 1 :(得分:0)

我的第一个猜测是每个模棱两可的错误:

#include <iostream>

using namespace std;

struct A{
   virtual void f1() = 0;
};

struct B : A{
};

struct C : A{
   void f1(){}
};



struct CPrime : A{
   void f1() {}
};

struct D : C, B, CPrime {
   void f2(){f1();}
};

int main(){ return 0; }

但不是:

g++ prog.cpp
prog.cpp: In member function ‘void D::f2()’:
prog.cpp:20: error: reference to ‘f1’ is ambiguous
prog.cpp:5: error: candidates are: virtual void A::f1()
prog.cpp:16: error:                 virtual void CPrime::f1()
prog.cpp:5: error:                 virtual void A::f1()
prog.cpp:12: error:                 virtual void C::f1()
prog.cpp:20: error: reference to ‘f1’ is ambiguous
prog.cpp:5: error: candidates are: virtual void A::f1()
prog.cpp:16: error:                 virtual void CPrime::f1()
prog.cpp:5: error:                 virtual void A::f1()
prog.cpp:12: error:                 virtual void C::f1()

答案 2 :(得分:0)