这一段代码报错:
template <class T>
void print_vector(vector<T>& v, string sep)
{
std::ostream_iterator<T> ostr_it(std::cout, sep) ;
std::copy(begin(v), end(v), ostr_it);
}
main.cpp:17:30:错误:没有匹配的构造函数来初始化“std::ostream_iterator”
std::ostream_iterator ostr_it(std::cout, sep);
我很困惑,因为如果我在模板函数之外执行此操作并直接输出向量,则不会出现错误:
vector<float> result(elements);
std::copy(begin(result), end(result), ostream_iterator<float>(cout, ", "));
怎么了?我需要专门化每个模板函数吗?
由于没有发布答案,我想我会继续。
签名为ostream_iterator
Accept 是一个 C 字符串,而不是一个 C++ 字符串:
std::ostream_iterator(ostream_type& stream, const CharT* delim)
已选定的是隐式转换 to char *
from std::string
正如所说,并不可取here https://stackoverflow.com/questions/492061/why-doesnt-stdstring-provide-implicit-conversion-to-char,所以你会得到一个错误。
为了让它工作,你可以简单地投射std::string
你自己:
std::ostream_iterator<T> ostr_it(std::cout, sep); // DOES NOT WORK
std::ostream_iterator<T> ostr_it(std::cout, sep.c_str()); // WORKS
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)