我试图在C ++中实现单链表。这是我的节点。
template <typename T> struct snode{
explicit snode(const T& val, snode* ptr=0) : value(val), next(ptr){}
T value;
snode* next;
};
这是我的贱人
template <typename T> class slist{
public:
class iterator;
slist() : head_(0){}
//Need to assign copy constructor
//assignment operator
//destructor
bool empty() const{ return (head_ == 0);}
int size() const;
iterator begin();
iterator end();
void insert(iterator p, const T& t);
void erase(iterator p);
private:
snode<T>* head_;
};
这里是迭代器
class iterator{
public:
explicit iterator(snode<T>* node = 0) : node_(node){}
T& operator*(){return node_->value; }
T* operator->(){return &(node_->value); }
iterator& operator++(){
if(node_ != 0)node_ = node_->next;
return *this;
}
iterator operator++(int){
iterator tmp = *this;
if(node_ != 0) node_ = node_->next;
return tmp;
}
bool operator==(const iterator& iter) const{return (node_ == iter.node_);}
bool operator!=(const iterator& iter) const{ return (node_ != iter.node_);}
snode<T>* node_;
};
问题是因为我在slist中声明了迭代器,我应该可以访问迭代器定义中的泛型T对象。这不会发生。我继续在T上喋喋不休地说
can't resolve symbol T
答案 0 :(得分:0)
您没有显示明确的实例化(或转换)类型。 &#34; T&#34;无法编译,因为它无法解决问题&#34; T&#34;和解。迭代器类需要被模板化&#34;或者在类中明确地进行调整以便进行协调。
答案 1 :(得分:0)
由于iterator
被声明为类模板slist
的嵌套类,因此您需要使用以下语法定义iterator
:
template <typename T> class slist<T>::iterator { ... };