2009-06-08 2 views
0

Я определяю шаблонную функцию, которая загружает карту из файла CSV:C++ шаблон с проблемой карты распределителем

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

то я стараюсь использовать его:

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

Но прибудет htis ошибки компиляции времени :

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

кажется, мой вызов функции приведения в некоторых неявных аргументов, но я не понимаю, ошибка и как ее исправить , Есть идеи?

ответ

3

Опустите амперсанд, вы не хотите передавать указатель на карту (обратите внимание на звездочку в конце сообщения об ошибке). Кроме того, вам не нужно явно передавать строковый литерал. Более того, компилятор должен иметь возможность автоматически вывести аргумент шаблона.

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

Кроме того, предположительно ваша функция loadCSV должна принимать const QString или, возможно, const QString &, а не только QString. Однако вряд ли это будет значительным. – ChrisInEdmonton

+0

Хороший улов, он определенно должен быть ссылкой на const. – avakar

+0

Спасибо. Работает сейчас. – bugmenot77