01/10/2018, 01:18

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ỉ

HelloWorld viết 03:32 ngày 01/10/2018

help me

HelloWorld viết 03:23 ngày 01/10/2018

@tntxtnt help me

viết 03:20 ngày 01/10/2018

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

HelloWorld viết 03:19 ngày 01/10/2018

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

viết 03:31 ngày 01/10/2018
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

HelloWorld viết 03:20 ngày 01/10/2018

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

HelloWorld viết 03:29 ngày 01/10/2018

đượ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

bạn cho mình xin fb , hay blog cá nhân với, 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 muốn hỏi chút định hướng

viết 03:31 ngày 01/10/2018

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

Bài liên quan
0