Ich habe ein Problem mit dem folgenden Code:
%Vor%Wie Sie sehen, habe ich einen Typedef in lamePtr. In der Klasse smarterPointer habe ich eine Funktion funFun (). Was ich versuche zu tun ist, einen anderen Typedef SomeType zu machen. Bis zu dieser Zeile funktioniert alles gut, bis wir mit der someType :: ptr-Abfrage zu der Zeile kommen.
Ich möchte, dass "query" lamePtr & lt; U & gt; :: ptr (ein einfacher Wert, kein Typdef;). Allerdings bekomme ich Kompilierungsfehler (mit gcc 4.4.3):
%Vor%Was mache ich hier falsch?
someType
, als lamePtr<U>
ist ein "abhängiger Name". Es hängt davon ab, was U
ist, ob es ein Mitglied ptr
gibt und wenn ja, welche Art von "Ding" dieses Mitglied ist.
Natürlich wissen Sie , dass für alle T
, lamePtr<T>::ptr
ein Typ ist, aber zu diesem Zeitpunkt der Kompilierung weiß der Parser das nicht.
Verwenden Sie das Schlüsselwort typename
, um dem Parser mitzuteilen, dass es sich um einen Typ handelt. Der Rest wird später im Kompilierungsprozess aufgelöst. Nur ein bisschen C ++ - Spaß.
Sie benötigen das Schlüsselwort typename
, um anzuzeigen, dass someType::ptr
ein Typ ist.
Siehe Offiziell, was ist Typname? für Details.