再次被变量声明撞了一下腰

闲来无事,重读一下《TCPL》,对其中的例子试验了一下:

<textarea cols="50" rows="15" name="code" class="cpp:collapse:firstline[4]">#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; using namespace std; int main() { string from, to; cin &gt;&gt; from &gt;&gt; to; ifstream is(from.c_str()); istream_iterator&lt;string&gt; ii(is); istream_iterator&lt;string&gt; eos(); // !here vector&lt;string&gt; b(ii, eos); sort(b.begin(), b.end()); ofstream os(to.c_str()); ostream_iterator&lt;string&gt; oo(os, "/n"); unique_copy(b.begin(), b.end(), oo); return !is.eof() || !os; } </textarea> 

 

其中的这行:

vector<string> b(ii, eos);

 

GCC给出了一段费解的错误:

D:/myproj/test/main.cpp|20|error: no matching function for call to 'std::vector<std::basic_string<char> >::vector(std::istream_iterator<std::basic_string<char> >&, std::istream_iterator<std::basic_string<char> > (&)())'|
用力的思考了一下,自信其中的ii和eos应该是合适的迭代器,应该可以匹配
vector<T>::vector(iterator beg, iterator end); // (注:伪代码)
形式的构造函数才是的!
经验告诉我,编译出现错误的地方并不一定是真正错误的地方。于是,再次审视前方代码:
istream_iterator<string> eos (); // !here
Ooops!看Gotchas的时候就听说过了,当时也理解了,到真正碰见,真是花了一番功夫才找到它。
改正就是那么简单:
istream_iterator<string> eos; // !here

 

你可能感兴趣的:(vector,String,function,OS,basic,iterator)