gpt4 book ai didi

c++ - 使用 istream_iterator 范围构造时无法访问 vector

转载 作者:搜寻专家 更新时间:2023-10-31 00:04:15 26 4
gpt4 key购买 nike


我试图编译此代码片段,但出现编译器错误 :( !使用 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构造正确,怎么会调用不了呢?

最好的问候,

最佳答案

我觉得是

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

被解析为函数声明:

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

这通常称为 "C++' most-vexing parse" .

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

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

关于c++ - 使用 istream_iterator 范围构造时无法访问 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com