Typedef innerhalb der Vorlagenklasse funktioniert nicht

7

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?

    
Melon 02.04.2011, 17:37
quelle

2 Antworten

12

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ß.

%Vor%     
Lightness Races in Orbit 02.04.2011, 17:51
quelle
9

Sie benötigen das Schlüsselwort typename , um anzuzeigen, dass someType::ptr ein Typ ist.

%Vor%

Siehe Offiziell, was ist Typname? für Details.

    
kennytm 02.04.2011 17:39
quelle