闲来无事,重读一下《TCPL》,对其中的例子试验了一下:
其中的这行:
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