读书人

看《c++程序设计语言》中关于迭代器和

发布时间: 2012-02-25 10:01:49 作者: rapoo

看《c++程序设计语言》中关于迭代器和io的一个问题
《c++程序设计语言》书上的源程序,编译不通过是什么原因:具体如下

源程序:
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
string from;
string to;
cin> > from> > to;

ifstream is(from.c_str());
istream_iterator <string> ii(is);
istream_iterator <string> eos;

vector <string> b(ii,eos);
sort(b.begin(),b.end());

ofstream os(to.c_str())
ostream_iterator <string> oo(os, "\n ");

unique_copy(b.begin(),b.end(),oo);
return !is.eof()||!os;
}


编译信息:

编译器: Default compiler
执行 g++.exe...
g++.exe "D:\cppProject\iterator.cpp " -o "D:\cppProject\iterator.exe " -I "C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include " -I "C:\Dev-Cpp\include\c++\3.4.2\backward " -I "C:\Dev-Cpp\include\c++\3.4.2\mingw32 " -I "C:\Dev-Cpp\include\c++\3.4.2 " -I "C:\Dev-Cpp\include " -L "C:\Dev-Cpp\lib "
D:\cppProject\iterator.cpp: In function `int main() ':
D:\cppProject\iterator.cpp:13: error: variable `std::ifstream is ' has initializer but incomplete type

D:\cppProject\iterator.cpp:14: error: `istream_iterator ' undeclared (first use this function)
D:\cppProject\iterator.cpp:14: error: (Each undeclared identifier is reported only once for each function it appears in.)
D:\cppProject\iterator.cpp:14: error: expected primary-expression before '> ' token
D:\cppProject\iterator.cpp:14: error: `ii ' undeclared (first use this function)
D:\cppProject\iterator.cpp:15: error: expected primary-expression before '> ' token
D:\cppProject\iterator.cpp:15: error: `eos ' undeclared (first use this function)

D:\cppProject\iterator.cpp:20: error: variable `std::ofstream os ' has initializer but incomplete type
D:\cppProject\iterator.cpp:21: error: expected `, ' or `; ' before "ostream_iterator "
D:\cppProject\iterator.cpp:23: error: `oo ' undeclared (first use this function)



[解决办法]
修改如下:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>

using namespace std;

int main()
{
string from;
string to;


cin> > from> > to;

ifstream is(from.c_str());
istream_iterator <string> ii(is);
istream_iterator <string> eos;

vector <string> b(ii,eos);
sort(b.begin(),b.end());

ofstream os(to.c_str());
ostream_iterator <string> oo(os, "\n ");

unique_copy(b.begin(),b.end(),oo);
return !is.eof()||!os;
}
[解决办法]
加#include <iterator>

读书人网 >C++

热点推荐