Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用istream_迭代器范围构造时无法访问向量_C++_Stl_Most Vexing Parse - Fatal编程技术网

C++ 使用istream_迭代器范围构造时无法访问向量

C++ 使用istream_迭代器范围构造时无法访问向量,c++,stl,most-vexing-parse,C++,Stl,Most Vexing Parse,我试图编译此代码段,但遇到编译器错误:(!使用Visual Studio 2010编译 #include <vector> #include <string> #include <sstream> #include <iterator> #include <iostream> using namespace std; int main() { string s( "Well well on" ); istringst


我试图编译此代码段,但遇到编译器错误:(!使用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" ) );
}
发生了什么?向量构造正确,我怎么能不能调用它

致以最良好的祝愿,

我想

vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
向量v(istream_迭代器(in),istream_迭代器()); 被解析为函数声明:

vector<string> v( istream_iterator<string> in, istream_iterator<string> );
vector v(istream\u迭代器in,istream\u迭代器);
这通常被称为

我想多加几个括号就能解决这个问题:

vector<string> v( (istream_iterator<string>(in)), (istream_iterator<string>()) );
向量v((istream_迭代器(in)),(istream_迭代器());
> p>这是所谓的例子。它是许多C++程序员的一大难题。

基本上,这段代码并不是你认为的意思:

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

解析器认为以下行是在声明函数:

vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
向量v(istream_迭代器(in),istream_迭代器()); 将main更改为此,它将编译:

int main() 
{
    string s( "Well well on" );
    istringstream in( s );
    istream_iterator<string> start = istream_iterator<string>(in);
    vector<string> v(start, istream_iterator<string>());
    copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
intmain()
{
字符串s(“开得好”);
istringstream(s);
istream_迭代器开始=istream_迭代器(in);
向量v(开始,istream_迭代器());
复制(v.begin(),v.end(),ostream_迭代器(cout,“\n”);
}

你应该在“有效的STL”上查“最终的C++图书指南和列表”,特别是感谢很多SBI,问题解决了^!“最令人烦恼的解析”,我会记住这个名字!谢谢约翰,我真的很喜欢你的解决方案;)陈:谢谢。有多种方法可以解决此问题。你在这里看到了三个。我真的想不出任何其他的解决办法。C++是我学到的最复杂的语言:(谢谢扎克的另一种解决方案);
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
int main() 
{
    string s( "Well well on" );
    istringstream in( s );
    istream_iterator<string> start = istream_iterator<string>(in);
    vector<string> v(start, istream_iterator<string>());
    copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}