The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Шиблоны"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Шиблоны"  
Сообщение от Heretic (ok) on 07-Июл-08, 12:47 
Доброго дня all!
Пишу небольшой шаблон, но собираться никак не хочет, не могу понять в чем проблема подскажите кому не сложно:

template<typename T>
void removeSubstrs( basic_string<T>& s,
                    const basic_string<T>& p) {
    basic_string<T>::size_type n;
    n =  p.length( );
//    string::size_type n = p.length( );
    for ( basic_string<T>::size_type i = s.find(p);  i != basic_string<T>::npos;  i = s.find(p)) s.erase(i, n);
};

При сборке получаю ошибки:

In file included from ./2.cpp:2:
./txtlib_.h: In function ‘void removeSubstrs(std::basic_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT> >&, const std::basic_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT> >&)’:
./txtlib_.h:65: ошибка: expected `;' before ‘n’
./txtlib_.h:66: ошибка: нет декларации ‘n’ в этой области видимости
./txtlib_.h:68: ошибка: expected `;' before ‘i’
./txtlib_.h:68: ошибка: нет декларации ‘i’ в этой области видимости

PS: Без шаблона функция работает нормально.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • Шиблоны, phpcoder, 13:01 , 07-Июл-08, (1)  
  • Шиблоны, phpcoder, 13:30 , 07-Июл-08, (2)  
  • Шиблоны, sascha, 13:32 , 07-Июл-08, (3)  
    • Шиблоны, Heretic, 13:37 , 07-Июл-08, (4)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Шиблоны"  
Сообщение от phpcoder email(??) on 07-Июл-08, 13:01 
В boost есть ф-ция erase_all() (http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/us...), как раз подходящая для вашегос случая, насколько понимаю. Рекомендую использовать boost вместо своих велосипедов.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Шиблоны"  
Сообщение от phpcoder email(??) on 07-Июл-08, 13:30 
P.S. А побеждается, это добавлением ключевого слова typename перед типом:


template<typename T>
void removeSubstrs( basic_string<T>& s,
                    const basic_string<T>& p) {
    typename basic_string<T>::size_type n;
    n =  p.length( );
//    string::size_type n = p.length( );
    for (typename basic_string<T>::size_type i = s.find(p);  i != basic_string<T>::npos;  i = s.find(p)) s.erase(i, n);
};

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Шиблоны"  
Сообщение от sascha on 07-Июл-08, 13:32 
Давно на с++ не кодил, но насколько я помню то  
   basic_string<T>::size_type n;
надо декларировать как typename  
   basic_string<T>::size_type n;
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Шиблоны"  
Сообщение от Heretic (??) on 07-Июл-08, 13:37 
>Давно на с++ не кодил, но насколько я помню то
>   basic_string<T>::size_type n;
>надо декларировать как typename
>   basic_string<T>::size_type n;

Благодарю всех кто ответил.
По поводу:
> Рекомендую использовать boost вместо своих велосипедов.

Данный пример был взят из этой книги http://www.ozon.ru/context/detail/id/3108549/
про boost читал, но еще не пробовал.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру