我有一個將矢量元素轉換爲以逗號分隔的字符串的函數。我想這個函數來數值如int,float或double等,所以我所做的工作功能接收的模板的矢量:相同類型之間的轉換無效
template <typename T>
std::string ConvertToString(std::vector<T> elements)
{
std::stringstream stream;
for(int i = 0; i < elements.size()-1; i++)
{
stream << elements[i];
stream << ",";
}
stream <<elements[elements.size()-1];
return stream.str();
}
然後我聲明並填充一個矢量:
std::vector<int> values;
values.push_back(1);
values.push_back(2);
values.push_back(3);
並嘗試調用該函數:
std::string convertedString = ConvertToString(values);
現在上述功能線我收到以下錯誤的召喚:
錯誤C2664: 'ConvertToString':無法從 '的std ::矢量< _Ty>' 轉換參數1至 '的std ::矢量< _Ty>'
我不明白爲什麼會這樣因爲提到的類型是相同的錯誤。有人可以解釋我在哪裏我錯了,我怎麼可以使函數調用工作?
非常感謝!
編輯:
我使用Visual Studio 2012
我完整的代碼是這樣的:
#include<string>
#include<iostream>
#include<sstream>
#include<vector>
std::string ConvertToString(std::vector<std::string> strings);
int __cdecl main(int argc, char **argv)
{
std::vector<int> values;
values.push_back(1);
values.push_back(2);
values.push_back(3);
values.push_back(4);
values.push_back(5);
std::string convertedValues = ConvertToString(values); //here the error occurs
return 0;
}
template <typename T>
std::string ConvertToString(const std::vector<T> elements)
{
std::stringstream stream;
for(int i = 0; i < elements.size()-1; i++)
{
stream << elements[i];
stream << ",";
}
stream <<elements[elements.size()-1];
return stream.str();
}
[無法重現](HTTP:/
正如已經被其他的答案中提到,你應該通過const引用而不是按值傳遞/ ideone。com/igVWQS)與你發佈的內容(至少使用g ++)...你可能需要展示更多(並告訴我們你正在使用哪個版本的VS)。 – Holt
無法重現與VS2015,VS2013和VS2005 – Danh
@Holt我已更新整個代碼,我不知道什麼是我的錯。 – meJustAndrew