【发布时间】:2012-05-08 15:08:14
【问题描述】:
请考虑以下代码。我正在尝试将向量的向量输出到 ostream。
#include <iterator>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
template<typename T>
std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
using namespace std;
copy(v.begin(), v.end(), ostream_iterator<T>(os, "\n"));
return os;
}
int main() {
using namespace std;
vector<string> v1;
cout << v1;
vector<vector<string> > v2;
cout << v2;
return 0;
}
我输出字符串向量的语句有效。我输出字符串向量向量的那个不是。我正在使用 g++ 4.7.0。我试过 w/ & w/o -std=c++11 标志。在 C++11 模式下,它在错误的半页中给了我这一行。
error: cannot bind 'std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >::ostream_type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
我想我不明白这意味着什么。有人可以向我解释吗?我或多或少知道什么是右值引用,但我不明白为什么std::basic_ostream<char> 不会绑定到std::basic_ostream<char>&&。可能我还不够了解。有没有更好的方法来做到这一点?
提前致谢。
【问题讨论】:
-
想一想,在
vector<vector<string > >的情况下,“\n”必须可转换为vector<string >。因为它不会工作 -
@J-16SDiZ:你在说什么?不,它没有。
-
@J-16SDiZ:不。那完全是错误的。