Lỗi hàm copy construtor template double linked list C++

Chào các bạn
mình có 1 vấn đề như sau
mình đang tự định nghĩa 1 template double linked list, nhưng đến phần hàm khởi tạo sao chép, dùng để sao chép 1 list ( do class có thuộc tính con trỏ)
mình làm như sau
thì bị lỗi
file h template

#include <iostream>
using namespace std;

template <typename T>
struct node{
	T data;
	node *next, *previous;
};

template <typename T>
struct linked{
	node <T> *head, *tail;
};

template <class T>
class dll{
private:
	linked <T> list;
public:
void print_list();
	node <T> *create_node(T );
	dll(const dll <T> &);
};

#include "double_linked_list.tpp"

file tpp

template <class T>
dll<T>::dll(const dll <T> &a){
	node <T> *temp = a.list.head;
	while (temp != NULL){
		node <T> *add = new node <T>;
	add->data = temp->data;
	add->next = NULL;
	add->previous = NULL;
		if (list.head == NULL) list.head = list.tail = add;
		else{
			add->next = list.tail->next;
			list.tail->next = add;
			add->previous = list.tail;
			list.tail = add;
		}
		
		temp = temp->next;
	}
}

ở main

dll <classroom> list_class;
dll <classroom> backup(list_class);
backup.print_list();

lỗi ở đâu nhỉ

help me :slight_smile: :smile:

@tntxtnt help me :slight_smile:

lỗi gì mới được ??? Hàm in đâu

lỗi về bộ nhớ
các hàm khác mình test cả rồi
mình k đưa lên vì chỉ làm rối câu hỏi
:3

lỗi ở hàm

template <class T>
dll<T>::dll(const dll <T> &a){
	node <T> *temp = a.list.head;
	while (temp != NULL){
		node <T> *add = new node <T>;
	add->data = temp->data;
	add->next = NULL;
	add->previous = NULL;
		if (list.head == NULL) list.head = list.tail = add;
		else{
			add->next = list.tail->next;
			list.tail->next = add;
			add->previous = list.tail;
			list.tail = add;
		}
		
		temp = temp->next;
	}
}

cụ thể là ở phần này

node <T> *add = new node <T>;
	add->data = temp->data;
	add->next = NULL;
	add->previous = NULL;
		if (list.head == NULL) list.head = list.tail = add;
		else{
			add->next = list.tail->next;
			list.tail->next = add;
			add->previous = list.tail;
			list.tail = add;
		}

vì mình thay phần trên bằng câu lệnh in ra node hiện tại thì vẫn chạy được
nhưng khi cấp phát bộ nhớ mới để copy dữ liệu qua list đang gọi hàm khởi tạo sao chép thì lỗi

không có thống báo lỗi nào cả
khi chạy thi ra lỗi trên

template <class T>
dll<T>::dll(const dll <T> &a)
{
    list.head = list.tail = NULL;
    //...
}

thử gán list.head với list.tail thành null trước coi được ko

2 Likes

cái đó mình nhét vào hàm khởi tạo void rồi mà

:smiley: được rồi, mình quên mất, khi

dll <classroom> backup(list_class);

thì nó sẽ gọi cái contructor copy chứ k gọi constructor
mà head và tail mình khởi tạo null ở trong constructor, nên nó lỗi :wink:

bạn cho mình xin fb , hay blog cá nhân với, :slight_smile: học hỏi
à mà không biết bạn có làm về xử lý ảnh hay biết về xử lý ảnh không (bằng c++ với thư viện open cv) kì tới mình làm đề tài thực tập cơ sở = xử lý ảnh :stuck_out_tongue: muốn hỏi chút định hướng

mình ko có fb. cũng ko làm xử lý ảnh :joy: Có gì hỏi trên này thôi, người khác biết trả lời giúp cho.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?