完全清楚,我问的问题超出了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()
答案 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)
使用gcc使用-fmessage-length = 0来避免破坏消息。 http://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Language-Independent-Options.html#index-diagnostic-messages-211