C++ c+中的各种错误+;链表合并排序
嗨,我的链表程序有一个错误,它应该对链表进行合并排序 我确实声明了,但它仍然给了我错误 p、 我没有完成merge排序函数,但是merge应该已经编译好了 请帮忙 代码: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;
#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(而不是你周围浮动的一些空值)