2010-08-20 4 views
3

Pleinement conscient, que la question que je pose est en dehors de la portée de la norme C++, je suis curieux de savoir pourquoi GCC renvoie la même erreur deux fois? Je sais pourquoi l'erreur est là, mais je regarde en avant pour comprendre pourquoi la duplication dans le message d'erreur.Pourquoi une erreur est émise deux fois?

#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(){} 

Erreur:

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() 

Répondre

2

Quelle version de G ++ utilisez-vous? De manière intéressante, en compilant le code que vous affichez sur MacOS X 10.6.4, en utilisant G ++ 4.2.1 d'Apple, je reçois le double message d'erreur.

Avec ma propre version de G ++ 4.5.1, je n'ai qu'un seul avertissement.

Il semble qu'un bogue a été corrigé.

+0

version GCC 4.3.4 – Chubsdad

+0

Ce qui a changé dans la source à g ++ près de la chaîne "référence à% s est ambigu" entre la version 4.2.1 et 4.5.1? –

0

Ma première supposition était une erreur par ambiguïté:

#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; } 

Mais non:

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() 
Questions connexes