I want to load all the lines from a text file into a vector
cout
:
<
You have fallen victim to the Most Vexing Parse, where the compiler sees your declaration as a function strings
returning a vector<string>
, taking two arguments:
istream_iterator<string>
called file
istream_iterator<string>
.To eliminate the vexing parse, use an extra pair of parentheses around the first argument:
vector<string> strings((istream_iterator<string>(file)) , istream_iterator<string>());
// ^ ^
or, alternatively in C++11, use curly braces for the strings
constructor
vector<string> strings{istream_iterator<string>(file) , istream_iterator<string>()};
// ^ ^
NOTE: Clang warns you about it through -Wvexing-parse
(on by default).