2009-06-08 12 views
0

Ich definiere eine Template-Funktion, die eine Karte aus einer CSV-Datei lädt:C++ Vorlage mit Karte allocator Problem

template <class T> 
bool loadCSV (QString filename, map<T,int> &mapping){ 
    // function here 
} 

ich dann versuchen, es zu benutzen:

map<int, int> bw; 
loadCSV<int>((const QString)"mycsv.csv",&bw); 

Aber get htis Zeitfehler kompilieren :

error: no matching function for call to 
‘loadCSV(const QString, std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >*)’ 

es scheint, mein Funktionsaufruf ist in einigen impliziten Argumenten zu bringen, aber ich verstehe nicht den Fehler und wie man es beheben . Irgendwelche Ideen?

Antwort

3

Lassen Sie das kaufmännische Und-Zeichen fallen, Sie möchten keinen Zeiger auf die Karte übergeben (beachten Sie das Sternchen am Ende der Fehlermeldung). Außerdem müssen Sie das Zeichenfolgenliteral nicht explizit umsetzen. Darüber hinaus sollte der Compiler in der Lage sein, das Template-Argument automatisch abzuleiten.

loadCSV("mycsv.csv", bw); 
+2

Auch vermutlich Ihre loadCSV-Funktion sollte const QString oder vielleicht const QString &, anstatt nur QString nehmen. Unwahrscheinlich, um bedeutend zu sein, obwohl. – ChrisInEdmonton

+0

Guter Fang, es sollte auf jeden Fall ein Hinweis auf const sein. – avakar

+0

Danke. Funktioniert jetzt. – bugmenot77