报错C++ does not support default-int这个问题怎么解决

zhurui2001113 2007-11-17 04:14:26
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;

/********************链表结点类**********************/
template <class T>
class Node
{
private:
Node<T> *next;// next 为指向下一结点的指针
public:
const T data;// data 为公有成员
Node(const T& item, Node<T> *ptrnext = NULL);// 构造函数
void InsertAfter(Node<T> *p);// 插入节点
Node<T> *DeleteAfter(void); // 删除节点
Node<T> *NextNode(void) const;// 取得下一结点的指针

};

template <class T>
Node<T>::Node(const T& item, Node<T> *ptrnext):// 构造函数 初始化数据及指针成员
data(item), next(ptrnext)
{
}

template <class T>
Node<T> *Node<T>::NextNode(void) const// 返回私有成员 next 的值
{
return next;
}

template <class T>
void Node<T>::InsertAfter(Node<T> *p)// 在当前结点之后插入结点 p
{
p->next = next;// p 指向当前结点的后继结点,然后将当前结点指向 p
next = p;
}

template <class T>
Node<T> *Node<T>::DeleteAfter(void)// 删除当前结点的后继结点并返回其指针
{
if (next == NULL)// 若没有后继结点,返回 NULL
return NULL;

Node<T> *tempPtr = next;// 保存指向被删除结点的指针
next = tempPtr->next;// 使当前结点指向 tempPtr 的后继结点

return tempPtr;// 返回被删除结点的指针
}

/**************************链表类****************************/

template <class T>
class LinkedList
{
private:
Node<T> *front, *rear;// 指向表头和表尾的指针
Node<T> *prevPtr, *currPtr;// 用于数据访问、插入和删除的指针
int size;// 表中的元素个数
int position;// 表中位置值,用于 Reset
void CopyList(const LinkedList<T> &L);// 将表 L 拷贝到当前表尾
public:
LinkedList(void);// 构造函数
LinkedList(const LinkedList<T>& L);//拷贝构造
~LinkedList(void);// 析构函数
LinkedList<T>& operator= (const LinkedList<T>& L);// 赋值运算符
/************遍历表的函数****************/
void Reset(int pos = 0);
void Next(void);
bool EndOfList(void) const;
int CurrentPosition(void) const;
/*******************插入函数*****************/
void InsertFront(const T& item);
void InsertRear(const T& item);
void InsertAt(const T& item);
void InsertAfter(const T& item);
/*****************删除函数********************/
void DeleteFront(void);
void DeleteAt(void);
/**************访问/修改数据*************/
T& Data(void);
bool Find(const T& item);

void ClearList(void);// 清空表的函数
void display(void);//显示
};

// 创建空表,使其指针指向 NULL,size 置为 0,position 置为 -1
template <class T>
LinkedList<T>::LinkedList(void): front(NULL), rear(NULL),
prevPtr(NULL),currPtr(NULL), size(0), position(-1)
{
}

template <class T>
void LinkedList<T>::CopyList(const LinkedList<T> &L)// 将 L 拷贝到当前表尾
{
Node<T> *p = L.front;// 用指针 P 遍历表
while (p != NULL)// 往当前表的表尾插入 L 的每个元素
{
InsertRear(p->data);
p = p->NextNode();
}
}

template <class T>
LinkedList<T>::LinkedList(const LinkedList<T>& L)
{
front = rear = prevPtr = currPtr = NULL;
size = 0;
position = -1;
CopyList(L);
}

template <class T>
LinkedList<T>::~LinkedList(void)
{
ClearList();
}

template <class T>
void LinkedList<T>::ClearList(void)
{
Node<T> *currPos, *nextPos;
currPos = front;
while (currPos != NULL)
{
nextPos = currPos->NextNode();// 取下一结点指针并删除当前结点
delete currPos;
currPos = nextPos; //移到下一结点
}
front = rear = prevPtr = currPtr = NULL;
size = 0;
position = -1;
}

template <class T>
LinkedList<T>& LinkedList<T>::operator= (const LinkedList<T>& L)
{
if (this == &L) // 无法赋值给自身
return *this;

ClearList();
CopyList(L);
return *this;
}

template <class T>
void LinkedList<T>::Reset(int pos)// 将表位置设置到 pos
{
if (front == NULL)// 若表为空,则返回
return;
if (pos < 0 || pos > size - 1)// 若位置非法,退出程序
throw "LinkedList::Reset: Invalid list position";

prevPtr = NULL;
currPtr = front;
for (position = 0; position != pos; position++)
{

prevPtr = currPtr;// 将两个指针右移
currPtr = currPtr->NextNode();
}
}

template <class T>
void LinkedList<T>::Next(void)// 将 prevPtr 和 currPtr 指针右移一个结点
{

if (currPtr != NULL)// 若已到表尾或表为空,返回
{
prevPtr = currPtr;// 将两个指针右移一个结点
currPtr = currPtr->NextNode();
position++;
}
}

template <class T>
bool LinkedList<T>::EndOfList(void) const// 如果已到表尾,返回真
{
return (currPtr == NULL);
}

template <class T>
int LinkedList<T>::CurrentPosition(void) const// 返回当前结点的位置
{
return position;
}

template <class T>
void LinkedList<T>::InsertFront(const T& item)// 往表头插入结点
{
Reset();
InsertAt(item); // 往表头插入
}

template <class T>
void LinkedList<T>::InsertRear(const T& item)// 在表尾插入结点
{
prevPtr = rear;
currPtr= NULL;
position = size;

InsertAt(item);
}

template <class T>
void LinkedList<T>::InsertAt(const T& item)// 往表的当前位置插入结点
{
Node<T> *newNode;

if (prevPtr == NULL)// 两种情况:往表头或表中插入
{
newNode = new Node<T>(item, front);// 往表头插入,包括往空表中插入
front = newNode;
}
else
{
newNode = new Node<T>(item);// 往表中插入。在 prevPtr 后插入结点
prevPtr->InsertAfter(newNode);
}

// 若 currPtr == NULL,表示往空表中或非空表的表尾插入;应修改 rear 及 position 值
if (currPtr == NULL)
{
rear = newNode;
position = size;
}
currPtr = newNode;// 改变 currPtr 及增加表的大小
size++;
}

template <class T>
void LinkedList<T>::InsertAfter(const T& item)// 在当前表位置后插入结点
{
Next();
InsertAt(item);
}

template <class T>
void LinkedList<T>::DeleteFront(void)// 删除表中第一个节点
{
if (front == NULL)
return;

Reset();
DeleteAt();
}

template <class T>
void LinkedList<T>::DeleteAt(void)// 删除表中当前结点
{
if (currPtr == NULL)// 如果表为空或已到表尾,则出错退出
throw "LinkedList::DeleteAt: Invalid deletion!";

Node<T> *p;

if (prevPtr == NULL)// 被删除的必是头结点或表中结点
{
// 保存表头指针并取消其链接。如果这是最后结点,front 变为 NULL
p = front;
front = front->NextNode();
}
else
// 取消链接 prevPtr 之后的中间结点,并保存其地址
p = prevPtr->DeleteAfter();

// 若表尾被删除,则 prevPtr 是新表尾且 position 减 1;否则,position 不变
// 如果 p 是最后结点,rear = NULL 且 position = -1
if (p == rear)
{
rear = prevPtr;
position--;
}

// 将 currPtr 指向下一结点。若 p 为表中最后结点,则 currPtr 为 NULL
currPtr = p->NextNode();

delete p;// 释放结点并将表大小减 1
size--;
}

template <class T>
T& LinkedList<T>::Data(void)// 返回当前结点的数据值
{
if (currPtr == NULL)// 若表为空或已到表尾,则出错
throw "LinkedList::Data: invalid reference!";

return currPtr->data;
}

template <class T>
bool LinkedList<T>::Find(const T& item)// 查找链表中是否有某数据
{
for (Reset(); !EndOfList(); Next())
if (Data() == item)
return true;

return false;
}

template <class T>
LinkedList<T>::display(void) //显示
{
Node<T> * temp = front;
while(temp!= NULL)
{
printf("%d\n",temp->data);
temp = temp->next;
}
}提示这一行有错 报错C++ does not support default-int这个问题怎么解决
int main()
{
LinkedList<int> A;
int i,j;
printf( "表 A 中的数据为:" );
scanf("%d",&i);

/* 插入数据 */
printf( "请问您要在表 A 的哪个位置插入数据:" );
scanf( "%d", &i );
A.InsertAt(j);

/* 删除数据 */
i = j = 0;
printf( "请问您要从表A的哪个位置开始删除数据:" );
scanf( "%u", &i );
A.DeleteAt();
A.display();
}
哪位大哥帮我解决一下啊
...全文
2980 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞哥 2007-11-17
  • 打赏
  • 举报
回复
我已看到代码吓我一跳,咋能不过呢,这就是我的代码啊,哈哈

谁知被你加了个函数
zhurui2001113 2007-11-17
  • 打赏
  • 举报
回复
行了
谢谢啊
飞哥 2007-11-17
  • 打赏
  • 举报
回复
你是不是没看好啊,我加了一个void返回值,改了一个Next

我编译通过了
zhurui2001113 2007-11-17
  • 打赏
  • 举报
回复
还是不行
到底是怎么回事啊
飞哥 2007-11-17
  • 打赏
  • 举报
回复


template <class T>
void LinkedList <T>::display(void) //显示
{
Node <T> * temp = front;
while(temp!= NULL)
{
printf( "%d\n",temp->data);
temp = temp->NextNode();
}
}

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧