我有一个将矢量元素转换为以逗号分隔的字符串的函数。我想这个函数来数值如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