Warum bekomme ich keine übereinstimmende Funktion, wenn ich diese Funktion erhalte [duplizieren]

8

Ich habe Klasse A und Klasse B (Unterklasse von A)

Klasse A hat Funktion

%Vor%

Wenn ich es versuche

Klasse B mit Funktion

%Vor%

Wenn ich versuche, foo (int, int, int) mit der Klasse aufzurufen, wird der Compiler mich nicht lassen, weil

steht %Vor%     
DogDog 24.11.2010, 20:29
quelle

3 Antworten

9

Der Grund warum hat mit der Art zu tun, in der C ++ Namen sucht und die Auflösung überlädt. C ++ beginnt mit dem Ausdruckstyp und sucht nach oben, bis ein Element gefunden wird, das dem angegebenen Namen entspricht. Es berücksichtigt dann nur Überladungen des Members mit diesem Namen im ermittelten Typ. Daher werden in diesem Szenario nur foo -Methoden berücksichtigt, die in B deklariert wurden und daher die Überladung nicht gefunden werden kann.

Am einfachsten ist es, using A::foo in class B hinzuzufügen, damit der Compiler auch diese Überladungen berücksichtigt.

%Vor%     
JaredPar 24.11.2010, 20:33
quelle
2

Die Überschreibung in Klasse B verbirgt die Methoden der Klasse A mit dem gleichen Namen. (Haben Sie Compiler-Warnungen? Die meisten Compiler warnen vor versteckten virtuellen Methoden.)

Um dies zu vermeiden, fügen Sie

hinzu %Vor%

zu Klasse B (in welcher public / protected / private -Abschnitt ist angemessen).

    
aschepler 24.11.2010 20:32
quelle
1

Verwenden Sie

%Vor%

zum Beispiel.

    
Steve Townsend 24.11.2010 20:34
quelle

Tags und Links