2012-03-25 15 views
0
template<class U, class W> 
std::ostream& operator<<(std::ostream & out, const Alias<U, W> & A) 
{ 
    out<<A.ItoS.size()<<std::endl; 
    for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++) 
     out<<it -> first<<" "<<it -> second<<std::endl; 
    return out; 
} 

Fehler sind on line unter Verwendung von:
for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++)Compilation Fehler bei Vorlage

Fehler: erwartet ';' bevor ‚es‘

Fehler: "Es war nicht

Andere Klassenfunktionen dont't keine Kompilierung Probleme in diesem Bereich erklärt.

Während ich std :: string statt U und int anstelle von W verwendet wurde, war alles in Ordnung. Ich verwende Codeblocks 10 mit MinGW-Compiler.

Antwort

2

vergessen Sie typename hier:

typename std::map<W, U>::const_iterator it = A.ItoS.begin(); 
//^^^^^^^ 

const_iterator ein abhängiger Name ist daher typename hier erforderlich ist. Für eine detaillierte Erläuterung finden Sie in diesem Thema:

In C++ 11, können Sie einfach schreiben:

auto it = A.ItoS.begin(); 

die eine Erleichterung für C++ Programmierer ist!

+0

Danke, ich bin ziemlich neu in C++ also warum muss ich typename dort setzen? – lpp

+1

@lpp: Gehen Sie durch den Link: [Wo und warum muss ich die Schlüsselwörter "template" und "typename" eingeben?] (Http://stackoverflow.com/questions/610245/where-and-why-do- i-have-to-put-the-template-und-type-keywords) – Nawaz

+0

Jetzt habe ich ein zusätzliches Problem mit dieser Klasse. In meinem einfachen Programm, bestehend aus Header, Klasse und Hauptprogramm, wenn ich versuche, diese Klassenmitglieder oder Funktionen zu verwenden, erhalte ich einen Fehler: undefinierter Verweis auf 'Alias ​​ :: Exist (std :: string const &) const 'Vor diesem Wechsel von Nicht-Vorlage zu Vorlage funktionierte alles einwandfrei. Gibt es etwas, was ich hätte übersehen können? Ich definierte Klasse als Alias ​​ Al – lpp