Объясните, почему не работает...
От:
miheich
Дата: 14.03.02 13:42
Оценка:
Из книги Страуструпа, стр 97
#include <string>
#include <iostream>
#include <fstream>
#include <ostream>
#include <istream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
string from, 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;
}
при компилировании дает
C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(33) : error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > > >::std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::a
llocator<char> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)
' : cannot convert parameter 1 from 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' to 'unsigned int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(37) : error C2664: '__thiscall std::ostream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >::std::ostr
eam_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,const char *)' : cannot convert parameter 2 fro
m 'const char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
example2_383.obj — 2 error(s), 0 warning(s)
Re: Объясните, почему не работает...
Здравствуйте miheich, Вы писали:
Может там ошибка, может у тебя. А вот так попробуй (варнингов много будет)
int main(int argc, char * argv[])
{
string from, to;
cin >> from >> to;
ifstream is(from.c_str());
istream_iterator<string> ii(is);
istream_iterator<string> eos;
vector<string> b(1000);
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;
}
M>Из книги Страуструпа, стр 97
M>#include <string>
M>#include <iostream>
M>#include <fstream>
M>#include <ostream>
M>#include <istream>
M>#include <iterator>
M>#include <vector>
M>#include <algorithm>
M>using namespace std;
M>int main(int argc, char* argv[])
M>{
M> string from, to;
M> cin >> from >> to;
M> ifstream is(from.c_str());
M> istream_iterator<string> ii(is);
M> istream_iterator<string> eos;
M> vector<string> b(ii,eos);
M> sort(b.begin(),b.end());
M> ofstream os(to.c_str());
M> ostream_iterator<string> oo(os,'\n');
M> unique_copy(b.begin(),b.end(),oo);
M>
M> return !is.eof() && !os;
M>}
M>при компилировании дает
M>C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(33) : error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
M>std::char_traits<char>,class std::allocator<char> > > >::std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::a
M>llocator<char> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)
M>' : cannot convert parameter 1 from 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' to 'unsigned int'
M> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
M>C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(37) : error C2664: '__thiscall std::ostream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >::std::ostr
M>eam_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,const char *)' : cannot convert parameter 2 fro
M>m 'const char' to 'const char *'
M> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
M>Error executing cl.exe.
M>example2_383.obj — 2 error(s), 0 warning(s)
Re: Объясните, почему не работает...
Здравствуйте miheich, Вы писали:
M> ifstream is(from.c_str());
M> istream_iterator<string> ii(is);
M> istream_iterator<string> eos;
M> vector<string> b(ii,eos);
В STL из MSVC++ 6 у класса 'std::vector' нет шаблонного конструктора из произвольной пары итераторов. Он заменен на нешаблонный конструктор из итераторов кокретного типа — 'std::vector::const_iterator'. Это сделано из-за того, что MSVC++ 6 плохо поддерживает шаблонные члены. Поэтому твой код компилироваться MSVC++ 6 не будет.
Best regards,
Андрей Тарасевич
Re[2]: Объясните, почему не работает...
АТ>M>> ifstream is(from.c_str());
M>> istream_iterator<string> ii(is);
M>> istream_iterator<string> eos;
M>> vector<string> b(ii,eos);
АТ>
АТ>В STL из MSVC++ 6 у класса 'std::vector' нет шаблонного конструктора из произвольной пары итераторов. Он заменен на нешаблонный конструктор из итераторов кокретного типа — 'std::vector::const_iterator'. Это сделано из-за того, что MSVC++ 6 плохо поддерживает шаблонные члены. Поэтому твой код компилироваться MSVC++ 6 не будет.
Замени на
vector<string> b;
copy(ii, eos, back_inserter(b));
Best regards,
Андрей Тарасевич
Re: Объясните, почему не работает...
Здравствуйте miheich, Вы писали:
M>Из книги Страуструпа, стр 97
M>#include <string>
M>#include <iostream>
M>#include <fstream>
M>#include <ostream>
M>#include <istream>
M>#include <iterator>
M>#include <vector>
M>#include <algorithm>
M>using namespace std;
M>int main(int argc, char* argv[])
M>{
M> string from, to;
M> cin >> from >> to;
M> ifstream is(from.c_str());
M> istream_iterator<string> ii(is);
M> istream_iterator<string> eos;
M> vector<string> b(ii,eos);
M> sort(b.begin(),b.end());
M> ofstream os(to.c_str());
M> ostream_iterator<string> oo(os,'\n');
M> unique_copy(b.begin(),b.end(),oo);
M>
M> return !is.eof() && !os;
M>}
M>при компилировании дает
M>C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(33) : error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
M>std::char_traits<char>,class std::allocator<char> > > >::std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::a
M>llocator<char> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)
M>' : cannot convert parameter 1 from 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' to 'unsigned int'
M> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
M>C:\Maxim\Project\VC\Stroustrup\example2_383\example2_383.cpp(37) : error C2664: '__thiscall std::ostream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >::std::ostr
M>eam_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,const char *)' : cannot convert parameter 2 fro
M>m 'const char' to 'const char *'
M> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
M>Error executing cl.exe.
M>example2_383.obj — 2 error(s), 0 warning(s)
с STLPort компилится и работает, только '\n' на "\n" заменить надо
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить