为模板双向链表实现迭代器时,二进制表达式的操作数无效

如何解决为模板双向链表实现迭代器时,二进制表达式的操作数无效

我能够使用一些基本功能以及其中的数据来实现模板双向链表。然后,我继续实现一个迭代器,以访问链接列表的节点内部的数据。当我实现迭代器时,迭代器文件中没有显示编译时错误。但是,当我尝试在main.cpp文件中使用迭代器的操作时遇到了问题(!=运算符显示错误:对二进制表达式无效的操作数)迭代器的实现是否存在问题?你能帮我吗?

LinkedList.h:

//
// Created by baoto on 9/29/2020.
//

#ifndef LINKEDLIST_TEMPLATE_LINKEDLIST_H
#define LINKEDLIST_TEMPLATE_LINKEDLIST_H
#include <iostream>
#include "Node_iterator.h"
#include "Node.h"
using namespace std;
template <class T>
class LinkedList {
private:
    Node<T>* head;
    Node<T>* tail;
    unsigned int size = 0;
    Node<T>* find (const T& item);
public:
    typedef Node_iterator<T> iterator;
    iterator begin();
    iterator end();
    void remove(Node<T>* node);
    bool isEmpty();
    void remove(const T& item);
    int givelist_size();
    void push_back(const T &item);
    void push_front(const T &item);
    void insertAfter(T search,T item);
    void insertBefore(T search,T item);
    LinkedList();
    void clearList();

    template<class S>
            friend ostream& operator<<(ostream& out,const LinkedList<S> &list)
    {
        for (Node<T>* i = list.head; i != nullptr; i = i->next)
        {
            out << i->data << endl;
        }
        return out;
    }
};
#include "LinkedList.cpp"
#endif //LINKEDLIST_TEMPLATE_LINKEDLIST_H

LinkedList.cpp:

//
// Created by baoto on 9/29/2020.
//
#ifndef LINKEDLIST_TEMPLATE_LINKEDLIST_CPP
#define LINKEDLIST_TEMPLATE_LINKEDLIST_CPP
#include "LinkedList.h"
template <class T>
void LinkedList<T>::clearList() {
    Node<T>* walker;
    for (walker = head; walker != nullptr; walker = walker->next)
    {
        Node<T>* deleted = walker;
        delete deleted;
    }
    head = tail = nullptr;
    size = 0;
}
template<class T>
bool LinkedList<T>::isEmpty() {
    return (head->next == nullptr);
}

template<class T>
int LinkedList<T>::givelist_size() {
    return this->size;
}
template <class T>
void LinkedList<T>::remove(Node<T> *node) {
    if (node != head && node!= tail)
    {
        node->next->prev = node->prev;
        node->prev->next = node->next;
        delete node;
    }
    else if (size ==1)
    {
        delete head;
        head = nullptr;
        tail = nullptr;
    }
    else if (node == head)
    {
        head = head->next;
        delete head->prev;
        head->prev = nullptr;
    }
    else if (node == tail)
    {
        tail = tail->prev;
        delete tail->next;
        tail->next = nullptr;
    }
    size--;
}
template <class T>
LinkedList<T>::LinkedList(): head(nullptr),tail(nullptr)
{

}
template <class T>
void LinkedList<T>::push_back(const T &item) {
    Node<T>* temp = new Node<T>;
    temp->data = item;
    temp->prev = tail;
    temp->next = nullptr;
    if (tail == nullptr)
    {
        tail = temp;
        head = temp;
    } else{
        tail->next = temp;
        tail = temp;
    }
    size++;

}
template <class T>
void LinkedList<T>::push_front(const T &item) {
    Node<T>* temp = new Node<T>;
    temp->data = item;
    temp->next = head;
    temp->prev = nullptr;
    if (head == nullptr) {
        tail = temp;
        head = temp;
    }
    else
    {
        head->prev = temp;
        head = temp;
    }
    size++;
}
template <class T>
Node<T>* LinkedList<T>::find(const T &item) {
    Node<T>* walker;
    for (walker = head; walker != nullptr; walker = walker->next)
        if (walker->data == item)
            return walker;
        return nullptr;
}
template <class T>

void LinkedList<T>::insertAfter(T search,T item) {
    Node<T>* prevNode;
    prevNode = find(search);
    if(prevNode != nullptr)
    {
        Node<T>* temp = new Node<T>;
        temp->data = item;
        temp->next = prevNode->next;
        prevNode->next = temp;
        temp->prev = prevNode;
        if (temp->next != nullptr)
            prevNode->next->prev = temp;
        else
        {
            temp = tail;
        }
    }
    size++;
}
template<class T>
void LinkedList<T>::insertBefore(T search,T item) {
    Node<T>* nextNode;
    nextNode = find(search);
    if (nextNode != nullptr)
    {
        Node<T>* temp = new Node<T>;
        temp->data = item;
        temp->prev = nextNode->prev;
        nextNode->prev = temp;
        temp->next = nextNode;
        if (temp->prev != nullptr)
        {
            temp->prev->next = nextNode;
        } else
        {
            head = temp;
        }
    }
    size++;
}
template <class T>
typename LinkedList<T>::iterator LinkedList<T>::begin() {
    iterator temp(head);
    return temp;
}
template <class T>
typename LinkedList<T>::iterator LinkedList<T>::end() {
    iterator temp(nullptr);
    return temp;
}

#endif
   

Node_iterator.h:

//
// Created by baoto on 10/9/2020.
//

#ifndef LINKEDLIST_TEMPLATE_NODE_ITERATOR_H
#define LINKEDLIST_TEMPLATE_NODE_ITERATOR_H

#include <iterator>
#include "Node.h"
template <class T>
class Node_iterator:public std::iterator<std::forward_iterator_tag,T> {
private:
    Node<T>* current;
public:
    T&operator*();
    Node_iterator operator++(int);
    Node_iterator& operator ++();
    Node_iterator operator --(int);
    Node_iterator& operator --();
    Node_iterator();
    Node_iterator(Node<T>* n);
    bool operator !=(const Node_iterator* n) const;
    bool operator == (const Node_iterator* n) const;
};

#include "Node_iterator.cpp"
#endif //LINKEDLIST_TEMPLATE_NODE_ITERATOR_H

Node_iterator.cpp:

//
// Created by baoto on 10/9/2020.
//
#ifndef LINKEDLIST_TEMPLATE_NODE_ITERATOR_CPP
#define LINKEDLIST_TEMPLATE_NODE_ITERATOR_CPP
#include "Node_iterator.h"
template <class T>
T& Node_iterator<T>::operator*() {
    return current->data;
}
template <class T>
Node_iterator<T> Node_iterator<T>::operator++(int) {
    Node<T>* temp = current;
    current = current->next;
    return *this;
}
template <class T>
Node_iterator<T>::Node_iterator() {
    current = nullptr;
}
template <class T>
Node_iterator<T>::Node_iterator(Node<T> *n) {
    current = n;
}
template <class T>
Node_iterator<T> Node_iterator<T>::operator--(int) {
    Node<T>* temp = current;
    current = current->prev;
    return *this;
}
template <class T>
bool Node_iterator<T>::operator!=(const Node_iterator<T> *n) const{
    return current != n->current;
}
template <class T>
Node_iterator<T>& Node_iterator<T>::operator++() {
    current = current->next;
    return *this;
}
template <class T>
Node_iterator<T>& Node_iterator<T>::operator--() {
    current = current ->prev;
    return *this;
}
template <class T>
bool Node_iterator<T>::operator==(const Node_iterator<T> *n) const {
    return current == n->current;
}

#endif

main.cpp:

#include <iostream>
#include "LinkedList.h"
using namespace std;
int main() {
    LinkedList<int> list;
    list.push_back(2);
    list.push_front(3);
    list.insertAfter(2,5);
    list.insertBefore(3,6);
    LinkedList<int>::iterator iter;
    for (iter = list.begin(); iter != list.end(); ++iter)
    {
        cout <<*iter<<endl;
    }
    cout << list;

}

这是终端中显示的错误,它很长,这就是为什么我不想发布它的原因:

C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp: In function 'int main()':
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:36: error: no match for 'operator!=' (operand types are 'LinkedList<int>::iterator {aka Node_iterator<int>}' and 'LinkedList<int>::iterator {aka Node_iterator<int>}')
     for (iter = list.begin(); iter != list.end(); ++iter)
                               ~~~~~^~~~~~~~~~~~~
In file included from C:\Users\baoto\CLionProjects\LinkedList_Template\Node_iterator.h:26:0,from C:\Users\baoto\CLionProjects\LinkedList_Template\LinkedList.h:8,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:2:
C:\Users\baoto\CLionProjects\LinkedList_Template\Node_iterator.cpp:32:6: note: candidate: bool Node_iterator<T>::operator!=(const Node_iterator<T>*) const [with T = int]
 bool Node_iterator<T>::operator!=(const Node_iterator<T> *n) const{
      ^~~~~~~~~~~~~~~~
C:\Users\baoto\CLionProjects\LinkedList_Template\Node_iterator.cpp:32:6: note:   no known conversion for argument 1 from 'LinkedList<int>::iterator {aka Node_iterator<int>}' to 'const Node_iterator<int>*'
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/iosfwd:40:0,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/ios:38,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/ostream:38,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/iostream:39,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/postypes.h:221:5: note: candidate: template<class _StateT> bool std::operator!=(const std::fpos<_StateT>&,const std::fpos<_StateT>&)
     operator!=(const fpos<_StateT>& __lhs,const fpos<_StateT>& __rhs)
     ^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/postypes.h:221:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::fpos<_StateT>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_algobase.h:64:0,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/char_traits.h:39,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/ios:40,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_pair.h:456:5: note: candidate: template<class _T1,class _T2> constexpr bool std::operator!=(const std::pair<_T1,_T2>&,const std::pair<_T1,_T2>&)
     operator!=(const pair<_T1,_T2>& __x,const pair<_T1,_T2>& __y)
     ^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_pair.h:456:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::pair<_T1,_T2>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_algobase.h:67:0,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:311:5: note: candidate: template<class _Iterator> bool std::operator!=(const std::reverse_iterator<_Iterator>&,const std::reverse_iterator<_Iterator>&)
     operator!=(const reverse_iterator<_Iterator>& __x,^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:311:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::reverse_iterator<_Iterator>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_algobase.h:67:0,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:349:5: note: candidate: template<class _IteratorL,class _IteratorR> bool std::operator!=(const std::reverse_iterator<_Iterator>&,const std::reverse_iterator<_IteratorR>&)
     operator!=(const reverse_iterator<_IteratorL>& __x,^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:349:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::reverse_iterator<_Iterator>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_algobase.h:67:0,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:1130:5: note: candidate: template<class _IteratorL,class _IteratorR> bool std::operator!=(const std::move_iterator<_IteratorL>&,const std::move_iterator<_IteratorR>&)
     operator!=(const move_iterator<_IteratorL>& __x,^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:1130:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::move_iterator<_IteratorL>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_algobase.h:67:0,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:1136:5: note: candidate: template<class _Iterator> bool std::operator!=(const std::move_iterator<_IteratorL>&,const std::move_iterator<_IteratorL>&)
     operator!=(const move_iterator<_Iterator>& __x,^~~~~~~~
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/stl_iterator.h:1136:5: note:   template argument deduction/substitution failed:
C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:11:48: note:   'LinkedList<int>::iterator {aka Node_iterator<int>}' is not derived from 'const std::move_iterator<_IteratorL>'
     for (iter = list.begin(); iter != list.end(); ++iter)
                                                ^
In file included from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/string:41:0,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/locale_classes.h:40,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/ios_base.h:41,from C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/ios:42,from C:\Users\baoto\CLionProjects\LinkedList_Template\main.cpp:1:
C:/mingw32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/allocator.h:158:5: note: candidate: template<class _T1,class _T2> bool std::operator!=(const std::allocator<_CharT>&,const std::allocator<_T2>&)
     operator!=(const allocator<_T1>&,const allocator<_T2>&)
     ^~~~~~~~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res