1

イテレータを使用して独自のテンプレート リスト クラスを作成していますが、このエラーが発生しました(((コンパイラ: MinGW の GCC(私は Eclipse IDE を使用しています) 私のコード: cpp:

#include <iostream>
#include "tlist.h"
using namespace std;
int main(){
  return 0;
}

ヘッダ

template<typename T>
class element{
private:
    element<T>* pre;
    element<T>* next;
    T data;
public:
    element(){};
    ~element(){};
    element(T d){
        pre=NULL;
        next=NULL;
        data=d;
    }
    void SetPre(element<T>* a){
        pre=a;
    };
    void SetNext(element<T>* a){
        next=a;
    };
    void SetData(T d){
        data=d;
    }
    element<T>* GetPre(){
        return pre;
    }
    element<T>* GetNext(){
        return next;
    }
    T GetData(){
        return data;
    }
};
template<typename T>
class Tlist{
private:
    element<T>* first;
    element<T>* last;
    int size;
public:
        int GetSize(){
        return size;
    }
        Tlist(){
        first=NULL;
        last=NULL;
        size=0;
    }
        ~Tlist(){};
        Tlist(T d){
        element<T>* tmp;
        tmp->SetPre(NULL);
        tmp->SetNext(NULL);
        tmp->SetData(d);
        this->size=1;
        this->first=tmp;
        this->last=tmp;
                }
    class Iterator{
    private:
        element<T>* pointing;
    public:
        Iterator(){
            pointing=NULL;
        };
        ~Iterator(){};
        Tlist<T>::Iterator& operator++(int i);
        element<T>* operator*();
        Iterator(element<T>* b){
            pointing=b;
        }
    };
    bool empty();
    void clear();
    void swap(Tlist<T>& lst);
    Tlist<T>::Iterator begin();
    Tlist<T>::Iterator end();
    T front();
    T back();
    void push_back(T t);
    void push_front(T t);
    void pop_front();
    void pop_back();
    Tlist<T>::Iterator insert(Tlist<T>::Iterator pos,T data);
    Tlist<T>::Iterator erase(Tlist<T>::Iterator pos);
    void splice(Tlist<T>::Iterator pos,Tlist<T>* in);
    Tlist<T> operator=(Tlist<T> const &other){
    this->size=other.size;
    this->first=other.first;
    this->last=other.last;
    return *this;
};
};
template<typename T>
Tlist<T>::Iterator& Tlist<T>::Iterator::operator++(int i){
    element<T>* temp=*this;
    if(temp->GetNext()!=NULL) this->pointing=temp->GetNext();
    return *this;
}
template<typename T>
element<T>* Tlist<T>::Iterator::operator*(){
    return pointing;
}
template<typename T>
bool Tlist<T>::empty(){
            if(this->size==0) return true;
            else return false;
};
template<typename T>
void Tlist<T>::clear(){
            element<T>* son;
            element<T>* temp;
            son=this->first;
            while(son!=NULL){
                temp=son->next;
                delete son;
                son=temp;
            }
            this->size=0;
};
template<typename T>
void Tlist<T>::swap(Tlist<T>& lst){
            int temp=this->size;
            this->size=lst->size;
            lst->size=temp;
            Tlist<T>* tmp;
            *tmp=*this;
            *this=lst;
            lst=*tmp;
}
template<typename T>
Tlist<T>::Iterator Tlist<T>::begin(){
                Tlist<T>::Iterator res(this->first);
                return res;
};
 template<typename T>
Tlist<T>::Iterator Tlist<T>::end(){
                Tlist<T>::Iterator res(this->last);
                return res;
}
template<typename T>
T Tlist<T>::front(){
return this->first->GetData();
}
template<typename T>
T Tlist<T>::back(){
    return this->last->GetData();
};
template<typename T>
void Tlist<T>::push_front(T d){
    element<T>* temp(d);
    this->size++;
    this->first->SetPre(temp);
    temp->SetNext(this->first);
    this->first=temp;
}
template<typename T>
void Tlist<T>::push_back(T d){
    element<T>* temp(d);
    this->last->SetNext(temp);
    this->size++;
    temp->SetPre(this->last);
    this->last=temp;
}
template<typename T>
void Tlist<T>::pop_front(){
    element<T>* temp=this->first->GetNext;
    delete this->first;
    this->first=temp;
    this->size--;
}
template<typename T>
void Tlist<T>::pop_back(){
    element<T>* temp=this->last;
    delete this->last;
    this->last=temp;
    this->size--;
}
template<typename T>
Tlist<T>::Iterator Tlist<T>::insert(Tlist<T>::Iterator pos,T d){
    element<T>* temp(d);
    element<T>* p=*pos;
    element<T>* n=p->GetNext();
    p->SetNext(temp);
    temp->SetPre(p);
    if(n!=NULL){
        n->SetPre(temp);
        temp->SetNext(n);
    }
    this->size++;
    return pos++;
}
template<typename T>
Tlist<T>::Iterator Tlist<T>::erase(Tlist<T>::Iterator pos){
    if(pos==this->end()){
                    this->pop_back();
                    return this->end();
                }
    if(pos==this->begin()){
        this->pop_front();
        return this->begin();
    }
    else{
        element<T>* del=*pos;
        element<T>* p=del->GetPre();
        element<T>* n=del->GetNext();
        pos++;
        p->SetNext(n);
        n->SetPre(p);
        delete del;
        this->size--;
        return pos;
    }
 };
 template<typename T>
void Tlist<T>::splice(Tlist<T>::Iterator pos,Tlist<T>* a){
    this->size+=a->GetSize();
    element<T>* p=*pos;
    element<T>* n=p->GetNext();
    p->SetNext(a->first);
    a->first->SetPre(p);
    n->SetPre(a->last);
    a->last->SetNext(n);
    a->size=0;
    a->first=NULL;
    a->last=NULL;
}

エラーは次のとおりです。

..\tlist.h:99: error: expected constructor, destructor, or type conversion before '&' token
..\tlist.h:136: error: expected constructor, destructor, or type conversion before 'Tlist'
..\tlist.h:141: error: expected constructor, destructor, or type conversion before 'Tlist'
..\tlist.h:184: error: expected constructor, destructor, or type conversion before 'Tlist'
..\tlist.h:198: error: expected constructor, destructor, or type conversion before 'Tlist'

助けてください、できればお願いします

4

1 に答える 1

2

あなたが言う時

Tlist<T>::anything

Tlist<T>コンパイラは最初に、あなたがと呼ばれるクラスの静的変数を意味している可能性があると考えますanythingタイプを示していることを示すには、構成の前にtypename:を付ける必要があります。

template<typename T>
typename Tlist<T>::Iterator& TList<T>::Iterator::operator++(int){
...

(編集:上の記事にぶつかっただけですtypename

于 2012-05-05T20:17:29.207 に答える