c++ - What's wrong with this iterator declaration -


i have method in class, here is:

void textquery::build_word_map() {    word_map = new map<string,loc*,less<string>,allocator<string> >;    typedef map<string,loc*,less<string>,allocator<string> >::value_type value_type;    typedef set<string,less<string>,allocator<string> >::difference_type  diff_type;     set<string,less<string>,allocator<string> > exclusion_set;     ifstream infile( "exclusion_set" );    if ( !infile )     {       static string default_excluded_words[25] = {     "the","and","but","that","then","are","been", "can","can't","cannot","could","did","for",             "had","have","him","his","her","its","into",     "were","which","when","with","would"};       cerr << "warning! unable open word exclusion file! -- "  << "using     default set\n";       copy( default_excluded_words, default_excluded_words+25, inserter(exclusion_set,     exclusion_set.begin()));     }   else      {       istream_iterator<string, diff_type> input_set( infile ), eos;       copy( input_set, eos, inserter( exclusion_set, exclusion_set.begin() ));     }      vector<string,allocator<string> > *text_words = text_locations->first;    vector<location,allocator<location> > *text_locs = text_locations->second;    register int elem_cnt = text_words->size();    ( int ix = 0; ix < elem_cnt; ++ix )     {       string textword = ( *text_words )[ ix ];       if ( textword.size() < 3 || exclusion_set.count( textword ))          continue;       if ( ! word_map->count((*text_words)[ix] ))         {              loc *ploc = new vector<location,allocator<location> >;             ploc->push_back( (*text_locs)[ix] );             word_map->insert( value_type( (*text_words)[ix],ploc ));         }       else (*word_map) [(*text_words) [ix]]->push_back( (*text_locs) [ix] );     } } 

, when try build it, i'm told it's impossible transform "std::ifstream" "std::basic_istream<_elem,_traits> &"? mean, , do (except studying iterators in-depth, ;-) )?

you have error, since use diff_type second template parameter. if want use diff_type should declare istream_iterator properly, declaration should be

istream_iterator<string, char, std::char_traits<char>, diff_type> 

since istream_iterator

template< class t,           class chart = char,           class traits = std::char_traits<chart>,           class distance = std::ptrdiff_t > class istream_iterator 

as can see here


Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -