Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> '*' : not a function 
V
    Опции темы
ZufuS
Дата 19.8.2007, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Код

template<class T>
class Iterator;

template<class T>
class List
{
    T value;
    List<T> *next, *prev, *last;
    int _size;
public:
    typedef Iterator<T> iterator;
    List() { prev=next=0; _size=0; last=this; }
    List(T x) { prev=next=0; _size=0; last=this; push_back(x); }
    ~List() { delete next; }
    Iterator<T> begin() const;
    Iterator<T> end() const;
    void push_back(T);
    void push_front(T);
    void pop_back();
    void pop_front();
    void clear() { delete next; _size=0; next=0; }
    void operator=(T x) { value=x; }
    int size() const { return _size; }
    bool empty() { return !_size; }
    friend T &Iterator<T>::operator*() const; //!
    List<T> *GetNext() const { return next; }
    List<T> *GetPrev() const { return prev; }
};

template<class T>
void List<T>::push_back(T x)
{
    last->next = new List<T>;
    last->next->value = x;
    last->next->prev = last;
    last = last->next;
    last->next = 0;
    _size++;
}

template<class T>
void List<T>::push_front(T x)
{
    if(!_size)
    {
        push_back(x);
        return;
    }
    List<T> *p = next;
    next = next->prev = new List<T>;
    next->value = x;
    next->prev = this;
    next->next = p;
    _size++;
}

template<class T>
void List<T>::pop_back()
{
    if(!_size) return;
    last = last->prev;
    delete last->next;
    last->next = 0;
    _size--;
}

template<class T>
void List<T>::pop_front()
{
    if(!_size) return;

    if(_size-- == 1)
    {
        clear();
        return;
    }

    List<T> *p = next;
    next->next->prev = this;
    next = next->next;
    p->next = 0;
    delete p;
}

template<class T>
Iterator<T> List<T>::begin() const
{
    Iterator<T> it;
    it.set(next);
    return it;
}

template<class T>
Iterator<T> List<T>::end() const
{
    Iterator<T> it;
    it.set(last->next);
    return it;
}

template<class T>
class Iterator
{
    List<T> *p;
public:
    void set(List<T> *x) { p=x; }
    T &operator*() const { return p->value; }
    Iterator<T> &operator++() { p=p->GetNext(); return *this; }
    Iterator<T> &operator--() { p=p->GetPrev(); return *this; }
    Iterator<T> operator++(int) { Iterator<T> t=*this; ++(*this); return t; }
    Iterator<T> operator--(int) { Iterator<T> t=*this; --(*this); return t; }
    bool operator==(Iterator<T> it) const { return p == it.p; }
    bool operator!=(Iterator<T> it) const { return p != it.p; }
};

error C2063: '*' : not a function

Добавлено через 10 минут и 22 секунды
даже вот так
Код

template<class T>
class Iterator;

template<class T>
class List
{
public:
    friend void Iterator<T>::operator*() const;
};

template<class T>
class Iterator
{
public:
    void operator*() const { return ; }
};


Добавлено через 14 минут и 27 секунд
на VS 2005 идёт, а на VC++ 6.0 не хочет.

Это сообщение отредактировал(а) ZufuS - 19.8.2007, 06:57
PM   Вверх
MAKCim
Дата 19.8.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(ZufuS @  19.8.2007,  06:56 Найти цитируемый пост)
на VS 2005 идёт, а на VC++ 6.0 не хочет.

на GCC 4.1
идет
скорее проблемы в VC 6.0


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 20.8.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Ты про это?
Код

  T &operator*() const { return p->value; }

Нормальный такой оператор, и на VC 6 компилировался бывало... Пробелов добавь, может съест...


--------------------
...
PM   Вверх
Fazil6
Дата 20.8.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Earnest @  20.8.2007,  10:47 Найти цитируемый пост)
Нормальный такой оператор, и на VC 6 компилировался бывало... Пробелов добавь, может съест...

проблема не в этом. Компиллятор хотит чтобы объявление этой функции было раньше чем 
Код

friend void Iterator<T>::operator*() const;


надо сделать типа того
Код

template<class T>
class List;

template<class T>
class Iterator
{
    List<T> *p;
public:
    void set(List<T> *x) { p=x; }
    T &operator*() const { return p->value; }
    Iterator<T> &operator++() { p=p->GetNext(); return *this; }
    Iterator<T> &operator--() { p=p->GetPrev(); return *this; }
    Iterator<T> operator++(int) { Iterator<T> t=*this; ++(*this); return t; }
    Iterator<T> operator--(int) { Iterator<T> t=*this; --(*this); return t; }
    bool operator==(Iterator<T> it) const { return p == it.p; }
    bool operator!=(Iterator<T> it) const { return p != it.p; }
};


template<class T>
class List
{
    T value;
    List<T> *next, *prev, *last;
    int _size;
public:
    typedef Iterator<T> iterator;
    List() { prev=next=0; _size=0; last=this; }
    List(T x) { prev=next=0; _size=0; last=this; push_back(x); }
    ~List() { delete next; }
    Iterator<T> begin() const;
    Iterator<T> end() const;
    void push_back(T);
    void push_front(T);
    void pop_back();
    void pop_front();
    void clear() { delete next; _size=0; next=0; }
    void operator=(T x) { value=x; }
    int size() const { return _size; }
    bool empty() { return !_size; }
    friend T &Iterator<T>::operator*() const; //!

.....

PM MAIL   Вверх
ZufuS
Дата 22.8.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



спасибо
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.