Ich kompiliere diesen Code mit GCC (4.2.1 Apple Build 5664)
%Vor%und gib mir den folgenden Fehler:
%Vor%Ich verstehe nicht den Grund, warum dieser Code mehrdeutig ist; Die beiden Methoden haben unterschiedliche Signaturen.
Ändern Sie c
auf diese Weise:
C ++ (vor C ++ 0x) ist bei der Vererbung von Funktionen ziemlich umständlich: Wenn Sie eine Funktion mit dem gleichen Namen einer Basisklassenfunktion angeben, werden die Basisklassenfunktionen ausgeblendet.
Es sieht so aus, als ob auch das Erben von zwei Klassen das gleiche Problem hat.
// Suche nach dem Standard ...
Die Namensauflösung erfolgt vor der Überladungsauflösung.
Es gibt keine operator()
in c
, also sucht der Compiler nach operator()
in seinen Basisklassen und findet eine in a
und eine andere in b
, wodurch der Name mehrdeutig wird (und keine Überladungsauflösung stattfindet).
Wenn Sie die Mehrdeutigkeit des Namens eliminieren möchten, können Sie a::operator()
explizit aufrufen: vc.a::operator()(1);
Es ist mehrdeutig, weil Sie eine Integer-Konstante übergeben, die (vermutlich) entweder in std::size_t
oder index
types umgewandelt werden kann. Ändern Sie main
in das folgende und es sollte es auflösen:
Es ist sehr wahrscheinlich, dass Sie hier keine Mehrfachvererbung verwenden sollten.
Tags und Links c++ inheritance operator-overloading