Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;单链表的实现 我试图在C++中实现一个单独链表。这是我的节点 template <typename T> struct snode{ explicit snode(const T& val, snode* ptr=0) : value(val), next(ptr){} T value; snode* next; };_C++_Templates_Iterator - Fatal编程技术网

C++;单链表的实现 我试图在C++中实现一个单独链表。这是我的节点 template <typename T> struct snode{ explicit snode(const T& val, snode* ptr=0) : value(val), next(ptr){} T value; snode* next; };

C++;单链表的实现 我试图在C++中实现一个单独链表。这是我的节点 template <typename T> struct snode{ explicit snode(const T& val, snode* ptr=0) : value(val), next(ptr){} T value; snode* next; };,c++,templates,iterator,C++,Templates,Iterator,您没有显示显式实例化(或铸造)类型。“T”无法编译,因为它无法解析“T”与之协调的内容。迭代器类需要“模板化”或在类中显式强制转换,以便协调。由于迭代器被声明为类模板的嵌套类slist,因此需要使用以下语法定义迭代器: template <typename T> class slist<T>::iterator { ... }; 模板类slist::迭代器{…}; 我不确定,我明白了。你能稍微修改一下代码来帮助我理解吗?@Jumper,有很多事情会妨碍你的代码工作。下面

您没有显示显式实例化(或铸造)类型。“T”无法编译,因为它无法解析“T”与之协调的内容。迭代器类需要“模板化”或在类中显式强制转换,以便协调。

由于
迭代器
被声明为类模板的嵌套类
slist
,因此需要使用以下语法定义
迭代器

template <typename T> class slist<T>::iterator { ... };
模板类slist::迭代器{…};

我不确定,我明白了。你能稍微修改一下代码来帮助我理解吗?@Jumper,有很多事情会妨碍你的代码工作。下面是一个框架工作程序,它演示了语法的正确性。
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_;
};
can't resolve symbol T
template <typename T> class slist<T>::iterator { ... };