Warum kann die abgeleitete Klasse nicht auf die Basisfunktion zugreifen, wenn Vorlagenklassen einbezogen werden?

8

Der folgende Code gibt einen Kompilierungsfehler:

%Vor%

FEHLER

Line 12: error: there are no arguments to 'bar' that depend on a template parameter, so a declaration of 'bar' must be available

Warum kommt dieser Fehler?

    
cppcoder 25.04.2012, 08:25
quelle

2 Antworten

14

Der Name foo() hängt nicht von den Template-Parametern von Derived ab - es ist ein nicht abhängiger Name. Die Basisklasse, in der foo() gefunden wird, andererseits - Base<T> - ist hängt von einem der Derived -Schablonenparameter ab (nämlich T ), also ist es ein < em> abhängige Basisklasse . C ++ sucht in abhängigen Basisklassen nicht nach nicht abhängigen Namen.

Um dies zu beheben, müssen Sie den Aufruf für bar() in Derived::foo() entweder als this->bar() oder Base<T>::bar() qualifizieren.

Dieser C ++ FAQ-Artikel erklärt es nett: siehe Ссылка

    
HighCommander4 25.04.2012, 08:28
quelle
0

Der von Ihnen bereitgestellte Code weist in der von Ihnen angegebenen Zeile keinen Buildfehler auf. Es hat einen hier:

%Vor%

was sollte lesen:

%Vor%

(oder verwenden Sie den gewünschten Typ anstelle von int.)

    
Grimm The Opiner 25.04.2012 08:31
quelle

Tags und Links