JLa*_*ana 6 c++ fstream vector most-vexing-parse c++11
我想vector<string通过使用其范围构造函数将文本文件中的所有行加载到a中,然后通过cout以下方式输出:
#include<iostream>
#include<fstream>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
ifstream file("file.txt");
vector<string> strings(istream_iterator<string>(file) , istream_iterator<string>());
for(auto s : strings)
cout << s << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在尝试编译上面的代码时,我得到了几个错误,例如:
error: no matching function for call to ‘begin(std::vector<std::basic_string<char> > (&) (std::istream_iterator<std::basic_string<char> >, std::istream_iterator<std::basic_string<char> > (*) ()))’
for(auto s : strings)
^
Run Code Online (Sandbox Code Playgroud)
还有其他几个......
我想我在这里遗漏了一些明显的东西,有人可以帮忙吗?
你已成为Most Vexing Parse的受害者,编译器将你的声明视为一个strings返回a 的函数,带有vector<string>两个参数:
istream_iterator<string>叫file istream_iterator<string>.要消除烦恼的解析,请在第一个参数周围使用一对额外的括号:
vector<string> strings((istream_iterator<string>(file)) , istream_iterator<string>());
// ^ ^
Run Code Online (Sandbox Code Playgroud)
或者,在C++ 11中,使用花括号作为strings构造函数
vector<string> strings{istream_iterator<string>(file) , istream_iterator<string>()};
// ^ ^
Run Code Online (Sandbox Code Playgroud)
注意:Clang -Wvexing-parse通过默认情况下警告您.
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |