crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
nvrrus
  опции профиля:
сообщение 24.10.2011, 17:57
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.10.2011
Пользователь №: 2963

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, может кто сталкивался с такой проблемой.

Пишу обертку над std::vector в QT так:

template<typename T >
class EXPLIB C_VectorW : public C_Serialization
{
private:
std::vector<T> m_vec;

public:
    C_VectorW() { }
    C_VectorW(const vector<T>& Vec) { m_vec = Vec;  }
    C_VectorW(const C_VectorW<T>& Vec) { m_vec = Vec.m_vec; }
    virtual ~C_VectorW() {}

    unsigned int size() const { return m_vec.size(); }
    void clear() { m_vec.clear(); }
    void push_back(const T& data) { m_vec.push_back(data); }
    void erase(std::vector<T>::iterator it)
    {

    }
};


Пытаюсь реализовать метод erase, связав его с итератором на std::vector<T>
Ругается - 'std::vector<T>::iterator' - is not a type

Что сделать, чтобы реализовать функцию erase с итераторами? Как подружить класс обертку с итераторами?

Заранее большое спасибо!




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.10.2011, 20:42
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а вот так

void erase(typename std::vector<T>::iterator it)


http://msdn.microsoft.com/en-us/library/8y88s595(VS.71).aspx

Сообщение отредактировал Алексей1153 - 24.10.2011, 20:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 24.10.2011, 20:47
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


В данном случае, компилятор не может определить, тип это или член класса. Поэтому надо явно ему сказать, что std::vector<T>::iterator - это тип данных, добавив квалификатор typename:
 void erase(typename std::vector<T>::iterator it)


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nvrrus
  опции профиля:
сообщение 27.10.2011, 17:37
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.10.2011
Пользователь №: 2963

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, уважаемые Iron Bug и Алексей1153.

Свою проблему с использованием итераторов решил использованием std::vector - вытаскиваю его из прослойки, где это нужно.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 20.6.2025, 17:23