使用 istream_iterator 范围构建时无法访问向量 [英] Cannot access vector when constructing with istream_iterator range

查看:45
本文介绍了使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆