Что не так с этим объявлением итератора

У меня есть метод в моем классе, вот он:

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 to 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();
for ( 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] );
}
}

, когда я пытаюсь его собрать, мне говорят, что невозможно преобразовать «std :: ifstream» в «std :: basic_istream»<_Elem, _Traits> &«?
Что это значит, и что мне делать (кроме углубленного изучения итераторов ;-))?

0

Решение

У вас есть ошибка, так как вы используете diff_type как second параметр шаблона.
Если вы хотите использовать diff_type ты должен объявить istream_iterator правильно, декларация должна быть

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

поскольку istream_iterator действительно

template< class T,
class CharT = char,
class Traits = std::char_traits<CharT>,
class Distance = std::ptrdiff_t >
class istream_iterator

как вы видете Вот

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]