Я использую g ++ в CodeBlocks IDE в Ubuntu.
Я новичок в STL и немного в C ++.
Q1: // ответил
std::istream_iterator< std::string > begin ( dictionaryFile );
std::istream_iterator< std::string > end;
std::vector< std::string> dictionary;
std::copy ( begin, end, std::back_inserter ( dictionary ) );
правильно, но когда я сменил
std::istream_iterator< std::string > end;
в
std::istream_iterator< std::string > end();
компилятор сообщает, что в четвертой строке нет вызова соответствующей функции.
Q2: // извините, я не прояснил проблему в первый раз
struct PS : std::pair< std::string, std::string > {
PS();
static struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}
} firstLess1; };
struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}} firstLess2;
Обратите внимание, что единственная разница между firstLess1 и firstLess2 заключается в том, что firstLess1 объявлен в PS.
когда я вызываю функцию:
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( PS::firstLess1, *j ) ) );
компилятор выдал мне ошибку 'неопределенная ссылка на PS :: firstLess1'.
а потом я изменился на
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( firstLess2, *j ) ) );
тогда он прошел компиляцию.
Более странно, в какой-то другой части программы я использовал оба
j = std::adjacent_find ( j , finis, PS::firstLess1 );
j = std::adjacent_find ( j , finis, firstLess2 );
и компилятор не выдал мне ошибку.