使用 istream_iterator 范围构建时无法访问向量 [英] Cannot access vector when constructing with istream_iterator range
本文介绍了使用 istream_iterator 范围构建时无法访问向量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试编译此代码片段,但出现编译器错误:(!使用 Visual Studio 2010 编译
I tried to compile this code snippet but I got compiler error :( ! Compile with Visual Studio 2010
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
string s( "Well well on" );
istringstream in( s );
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
copy( v.begin(), v.end(), ostream_iterator<string>( cout, "\n" ) );
}
错误:
Error 1 error C2228: left of '.begin' must have class/struct/union c:\visual studio 2008 projects\vector test\vector test\main.cpp 13 vector test
Error 2 error C2228: left of '.end' must have class/struct/union c:\visual studio 2008 projects\vector test\vector test\main.cpp 13 vector test
发生了什么?vector构造正确,怎么调用不了?
What happened? vector was constructed correctly, how could I not be able to call it?
最好的问候,
推荐答案
我认为这个
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
被解析为函数声明:
vector<string> v( istream_iterator<string> in, istream_iterator<string> );
这通常被称为C++ 最烦人的解析".
我认为一些额外的括号可以解决这个问题:
I think a few extra parentheses will cure this:
vector<string> v( (istream_iterator<string>(in)), (istream_iterator<string>()) );
这篇关于使用 istream_iterator 范围构建时无法访问向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文