30/09/2018, 16:11

Lỗi khai báo không hiểu class khi đã include header của class đó

Mình xây dựng danh sách liên kết đôi khi khai báo con trỏ first bị lỗi loay hoay mãi không khắc phục được
code của mình đây ai giúp với

#pragma once
#include "SinhVien.h"
#include "Node.h"

class LinkedList
{
private:
    Node *first;
public:
    int length;
    LinkedList();/*
	void pushFirst(SinhVien);
	void pushLast(SinhVien);*/
    ~LinkedList();
};

còn đây là Node

#pragma once
#include "SinhVien.h"
#include "LinkedList.h"

class Node
{
private:
    friend class LinkedList;
    SinhVien value;
    Node *next;
    Node *prev;
public:
    Node(SinhVien);
    Node();
    ~Node();
};

build gặp lỗi này

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

Cái này là do lỗi include chồng chéo.

Mình cần cho thằng LinkedList biết là nó có một cái class Node ở đâu đó bằng cách làm như sau.

#pragma once
#include "SinhVien.h"
#include "Node.h"

class Node;
class LinkedList
{
private:
    Node *first;
public:
    int length;
    LinkedList();/*
	void pushFirst(SinhVien);
	void pushLast(SinhVien);*/
    ~LinkedList();
};

Thử xem còn lỗi không?

Nu Kan Trần viết 18:18 ngày 30/09/2018

Được rồi anh em loay hay 3h đồng hồ rồi ạ. Vậy là do nó không biết tìm Node ở đâu ạ?

Nếu mình viết chung một file thì có bị lỗi này không anh?

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

Vậy là do nó không biết tìm Node ở đâu ạ?

Em có thể hiểu trường hợp này như sau:

File A include file B
File B include file A

Khi file A muốn gọi một class bên file B, nhưng file B lại cần 1 cái gì đó của file A. Dẫn đến 2 thằng chờ nhau.

Để tránh trường hợp đó, thì mình thông báo cho nó là mày đừng chờ, cứ làm đi

class Node;

Dòng này anh báo cho class LinkedList biết là có cái class Node tồn tại, mày xài đi, còn sau này mày sẽ biết nó cấu trúc như thế nào.

Nếu mình viết chung một file thì có bị lỗi này không anh?

Không bị lỗi này

Nu Kan Trần viết 18:20 ngày 30/09/2018

Đã ngộ ra chân lý. cảm ơn anh nhiều

Bài liên quan
0