C++ c+中的各种错误+;链表合并排序

C++ c+中的各种错误+;链表合并排序,c++,C++,嗨,我的链表程序有一个错误,它应该对链表进行合并排序 我确实声明了,但它仍然给了我错误 p、 我没有完成merge排序函数,但是merge应该已经编译好了 请帮忙 代码: #ifndef _NODE #define _NODE template<typename ItemType> class Node { private: ItemType item; // A data item Node<ItemType>* next;

嗨,我的链表程序有一个错误,它应该对链表进行合并排序

我确实声明了,但它仍然给了我错误

p、 我没有完成merge排序函数,但是merge应该已经编译好了

请帮忙

代码:

#ifndef _NODE
#define _NODE 

template<typename ItemType>

class Node {
    private:
        ItemType item; // A data item
        Node<ItemType>* next; // Pointer to next node
    public:
        Node();
        Node(const ItemType& anItem);
        Node(const ItemType& anItem, Node<ItemType>* nextNodePtr);
        void setItem(const ItemType& anItem);
        void setNext(Node<ItemType>* nextNodePtr);
        void mergeSort(Node<ItemType>*& head);
        Node<ItemType>* merge(Node<ItemType>*& head1, Node<ItemType>*& head2);
        ItemType getItem() const;
        Node<ItemType>* getNext() const;
}; // end Node 

#endif

template<typename ItemType>
Node<ItemType>::Node() {

    next(nullptr)

} // end default constructor 

template<typename ItemType>
Node<ItemType>::Node(const ItemType& anItem) {

    item(anItem);
    next(nullptr);

} // end constructor 

template<typename ItemType>
Node<ItemType>::Node(const ItemType& anItem, Node<ItemType>* nextNodePtr) {

    item(anItem);
    next(nextNodePtr);

} // end constructor 

template<typename ItemType>
void Node<ItemType>::setItem(const ItemType& anItem) {

    item = anItem;

} // end setItem 

template<typename ItemType>
void Node<ItemType>::setNext(Node<ItemType>* nextNodePtr) {

    next = nextNodePtr;

} // end setNext 

template<typename ItemType>
ItemType Node<ItemType>::getItem() const {

    return item;

} // end getItem 

template<typename ItemType>

Node<ItemType>* Node<ItemType>::getNext() const {

    return next;

} // end getNext

template<typename ItemType>
void Node<ItemType>::mergeSort(Node<ItemType>*& head) {

    Node<ItemType>*countptr = head;
    int length = 0;

    while (countptr->getNext() != nullptr) {
        length++;
        countptr = countptr->getNext();
    }

    //if only one or non in list then return list
    if (length <= 1)
        return head;

    //int half = length / 2;





}

template<typename ItemType>
ItemType Node<ItemType>::merge(Node<ItemType>*& head1, Node<ItemType>*& head2) {

    Node<ItemType>*head = nullptr;
    Node<ItemType>*cur = nullptr;

    //set the first element
    if (head1->getItem() >= head2->getItem()) {
        head = head2;
        head2 = head2->getNext();
    }
    else {
        head = head1;
        head1 = head1->getNext();
    }

    cur = head;

    while (true) {
        if (head1->getItem() == NULL && head2->getItem() != NULL) {
            cur->setNext(head2);
            cur = cur->getNext();
            head2 = head2->getNext();
        }
        else if (head2->getItem() == NULL && head1->getItem() != NULL) {
            cur->setNext(head1);
            cur = cur->getNext();
            head1 = head1->getNext();
        }
        else if (head1->getItem() >= head2->getItem()) {
            cur->setNext(head2);
            cur = cur->getNext();
            head2 = head2->getNext();
        }
        else if (head1->getItem() <= head2->getItem()) {
            cur->setNext(head1);
            cur = cur->getNext();
            head1 = head1->getNext();
        }
        else {
            break;
        }
    }


    return head;
}
\ifndef\u节点
#定义_节点
样板
类节点{
私人:
ItemType item;//数据项
Node*next;//指向下一个节点的指针
公众:
Node();
节点(const ItemType和anItem);
节点(const ItemType&anItem,节点*nextNodePtr);
void setItem(const ItemType&anItem);
void setNext(节点*nextNodePtr);
无效合并排序(节点*&头部);
节点*合并(节点*和头1,节点*和头2);
ItemType getItem()常量;
节点*getNext()常量;
}; // 端节点
#恩迪夫
样板
Node::Node(){
下一个(空PTR)
}//结束默认构造函数
样板
节点::节点(const ItemType和anItem){
项目(项目);
下一步(nullptr);
}//结束构造函数
样板
Node::Node(const ItemType&anItem,Node*nextNodePtr){
项目(项目);
下一个(下一个命令);
}//结束构造函数
样板
void节点::setItem(const ItemType&anItem){
项目=项目;
}//结束集合项
样板
void节点::setNext(节点*nextNodePtr){
next=nextNodePtr;
}//结束设置下一步
样板
ItemType节点::getItem()常量{
退货项目;
}//结束getItem
样板
Node*Node::getNext()常量{
下一步返回;
}//结束getNext
样板
无效节点::合并排序(节点*&头){
节点*countptr=头部;
整数长度=0;
while(countptr->getNext()!=nullptr){
长度++;
countptr=countptr->getNext();
}
//如果列表中只有一个或非一个,则返回列表
如果(长度getItem()>=head2->getItem()){
头=头2;
head2=head2->getNext();
}
否则{
头=头1;
head1=head1->getNext();
}
cur=头部;
while(true){
如果(head1->getItem()==NULL&&head2->getItem()!=NULL){
cur->setNext(head2);
cur=cur->getNext();
head2=head2->getNext();
}
else if(head2->getItem()==NULL&&head1->getItem()!=NULL){
cur->setNext(head1);
cur=cur->getNext();
head1=head1->getNext();
}
否则如果(head1->getItem()>=head2->getItem()){
cur->setNext(head2);
cur=cur->getNext();
head2=head2->getNext();
}
else if(head1->getItem()getItem()){
cur->setNext(head1);
cur=cur->getNext();
head1=head1->getNext();
}
否则{
打破
}
}
回流头;
}
这是我的错误:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE

\xlocale(341): war
ning C4530: C++ exception handler used, but unwind semantics are not enabled. Sp
ecify /EHsc
c:\users\mykev\desktop\Node.h(145): error C2244: 'Node<ItemType>::merge': unable
 to match function definition to an existing declaration
c:\users\mykev\desktop\Node.h(100): note: see declaration of 'Node<ItemType>::me
rge'
c:\users\mykev\desktop\Node.h(145): note: definition
c:\users\mykev\desktop\Node.h(145): note: 'ItemType Node<ItemType>::merge(Node<I
temType> *&,Node<ItemType> *&)'
c:\users\mykev\desktop\Node.h(145): note: existing declarations
c:\users\mykev\desktop\Node.h(145): note: 'Node<ItemType> *Node<ItemType>::merge
(Node<ItemType> *&,Node<ItemType> *&)'
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE
\xlocale(341):战争
宁C430:使用C++异常处理程序,但未启用展开语义。服务提供商
ecify/EHsc
c:\users\mykev\desktop\Node.h(145):错误C2244:“节点::合并”:无法
将函数定义与现有声明匹配
c:\users\mykev\desktop\Node.h(100):注意:请参见“Node::me”的声明
rge'
c:\users\mykev\desktop\Node.h(145):注意:定义
c:\users\mykev\desktop\Node.h(145):注意:'ItemType Node::merge(Node*&,Node*&)'
c:\users\mykev\desktop\Node.h(145):注意:现有声明
c:\users\mykev\desktop\Node.h(145):注意:'Node*Node::merge
(节点*&,节点*&)'
您的代码中(至少)有两个问题

1) 默认构造函数在第29行周围缺少分号

2) 您的merge原型(第17行左右)与您的实现(第100行左右)不一样。您可以将第100行更改为更像:

template<typename ItemType>
Node<ItemType>* Node<ItemType>::merge(Node<ItemType>*& head1, Node<ItemType>*& head2) {
模板
节点*节点::合并(节点*&头1,节点*&头2){

定义:
ItemType节点::合并(节点*&head1,节点*&head2
声明:
Node*合并(节点*&head1,节点*&head2)
您看到返回类型的明显区别了吗?天哪!!!指针…是的!!谢谢!谢谢!!我修正了数字1和2!!非常感谢。一天没睡真的会让您效率低下。但这就是编译器的作用!另外,让您的生活更轻松,并且在任何地方都使用nullptr(而不是你周围浮动的一些空值)