使用 istream_iterator 范围构造时无法访问向量

2024-04-27


我尝试编译此代码片段,但出现编译器错误:(!使用 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" ) );
}

Errors:

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<string> v( istream_iterator<string>( in ), istream_iterator<string>() );

被解析为函数声明:

vector<string> v( istream_iterator<string> in, istream_iterator<string> );

这通常被称为“C++最令人烦恼的解析” https://stackoverflow.com/questions/4283576/constructor-invocation-mechanism.

我认为一些额外的括号可以解决这个问题:

vector<string> v( (istream_iterator<string>(in)), (istream_iterator<string>()) );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 istream_iterator 范围构造时无法访问向量 的相关文章

随机推荐