m0_51859854 2021-04-06 21:54 采纳率: 0%
浏览 122

C2280尝试引用已删除的函数

头文件:
#pragma once
#pragma once
#include<iostream>
using namespace std;
template<class T>
struct Node {
	T data; struct Node<T>* next = NULL;
};
template<class T>
class LinkList
{
public:
	LinkList(T a[], int n, double h)//头插法构造
	{
		front = new Node<T>;
		front->next = NULL;
		for (int i = n - 1; i >= 0; i--)
		{
			Node<T>* s = new Node<T>;
			s->data = a[i];
			s->next = front->next;
			front->next = s;
		}
	};
	LinkList(T a[], int n, int e)//尾插法构造
	{
		front = new Node<T>;
		Node<T>* r = front;
		for (int i = 0; i < n; i++)
		{
			Node<T>* s = new Node<T>;
			s->data = a[i];
			r->next = s;
			r = s;
		}
	};

	void Insert(int i, T x)//插入
	{
		Node<T>* s = new Node<T>;//建立新结点
		Node<T>* p = front;
		if (i != 1) p = Get(i - 1);
		if (p) {

			s->data = x;
			s->next = p->next;
			p->next = s;
		}
		else throw"插入位置错误";
	};

	T Delete(int i)//删除
	{
		Node<T>* p = front;
		if (i != 1)p = Get(i - 1);
		Node<T>* q = p->next;
		p->next = q->next;
		T x = q->data;
		delete q;
		return x;
	};

	//获取第i个位置上的元素结点的地址yc
	Node<T>* Get(int i)
	{
		Node<T>* p = front->next;
		int j = 1;
		while (p != NULL && j != i)
		{
			p = p->next;
			j++;
		}
		return p;

	};

	/*
	Node<T>* Get(int i)//按值查找
	{
		Node<T>* p = front->next; int j = 1;
		while (p && j != i) {
			p = p->next; j++;
		}
		return p;
	};
	*/
	int Locate(T x)//按位查找
	{
		Node<T>* p = front->next;
		int j = 1;
		while (p) {
			if (p->data == x)return j;
			p = p->next; j++;
		}
		return -1;
	};

	int GetLenth()//获取链表的长度yc
	{
		Node<T>* p = front->next;
		int length = 0;
		while (p != NULL) {
			p = p->next; length++;
		}
		return length;
	};


	~LinkList()//销毁
	{
		Node<T>* p = front;
		while (p) {
			front = p; p = p->next; delete front;
		}
	};
	void PrintList()//显示
	{
		Node<T>* p = front->next;
		while (p != NULL)
		{
			p->data.Print();
			p = p->next;
		}
		cout << endl;
	};
private:
	Node<T>* front;
};
class TEXT
{
public:

	TEXT(int t) {
		x_t = t;
	};
	void Print() {
		cout << x_t << endl;
	};
	bool operator==(TEXT& p)
	{
		if (p.x_t == x_t) return true;
		return false;
	}
private:
	int x_t;
};


源文件:
#include"标头.h"
int main() {
	TEXT s[5] = { 1,2,3,4,5 };
	LinkList<TEXT>list(s, 5, 1.111);//实现头插法
	list.Insert(2, 9);//在第二个位置插入数字9	
	list.Locate(2);//按位查找第二个元素并返回其值
	list.GetLenth();//获取线性表的长度
	list.~LinkList();//销毁线性表
	list.PrintList();//显示
}

实现单链表的一个简单实例,编译出现错误C2280尝试引用已删除的函数

  • 写回答

5条回答 默认 最新

  • 关注

    delete q这条语句有问题吧,删除看看。

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突