Объясните, почему не работает...
От: 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: Объясните, почему не работает...
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.03.02 16:17
Оценка:
Здравствуйте 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: Объясните, почему не работает...
От: Андрей Тарасевич Беларусь  
Дата: 14.03.02 18:06
Оценка:
Здравствуйте 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]: Объясните, почему не работает...
От: Андрей Тарасевич Беларусь  
Дата: 14.03.02 18:42
Оценка:
АТ>
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: Объясните, почему не работает...
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.03.02 10:26
Оценка:
Здравствуйте 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" заменить надо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.