die folgende Hierarchie von Strukturen vor:Hiding überladene virtuelle Funktion
struct I1 {
virtual void doit() = 0;
};
struct I2 {
virtual void doit(int) = 0;
};
struct I12 : I1, I2 {
using I1::doit;
using I2::doit;
};
struct Derived : I12 {
void doit(int) override {}
};
des Kompilieren (mit clang
oder g++
mit -Woverloaded-virtual
) gibt mir eine Warnung:
'Derived::doit' hides overloaded virtual function [-Woverloaded-virtual]
Allerdings, wenn ich I12
ändern zu den folgenden, kompiliert es unter clang
, während g++ -Woverloaded-virtual
noch eine Warnung gibt:
struct I12 : I1, I2 {
using I1::doit;
void doit(int) override = 0;
};
Wo ist der Unterschied zwischen using I2::doit
und void doit(int) override = 0
? Naiverweise hätte ich gedacht, dass ersteres ausreicht, um den Compiler zu informieren, dass ich weiß, dass es zwei Versionen von doit
gibt.
Welchen Compiler verwenden Sie? Ich kann keine Warnung in gcc oder MSVS bekommen, aber ich klänge. – NathanOliver
Ja, du versteckst es. Was ist deine Frage? Wie man die ausführliche Warnung beseitigt? – songyuanyao
@NathanOliver Ich benutze clang, aber die Verwendung von g ++ mit Warnungen zeigt ein anderes Verhalten. – phimuemue