Lỗi ghi chồng 2 file.h

Chào mọi người, em khai báo class Subject qua file Subject.h và class Observe ở Observe.h.
Vì trong class Subject cần Observer nên em #include “Observerh”
Trong class Observe cần Subject nên em #include “Subject.h”
Dẫn đến lỗi Error: C2061 syntax error: identifier ‘Subject’ Observe
->Em có thử lên mạng tìm hiểu rồi thử thêm ifndef và endif vào nhưng ko hiệu quả. (Một phần là do em chưa hiểu kỹ về ifndef và endif)

Mọi người cho em xin cách sửa lỗi này với ạ. Em cảm ơn ạ
File Subject.h

#ifdef Subject_H
#define Subject_H

#include "Observe.h"
class Subject
{
public:
    int x;
    Subject() { x = 0;  }
    
};

#endif

File Observe.h

#ifdef Observe_H
#define Observe_H
#include "Subject.h"

class Observe
{
public:
    virtual void update(Subject* sub) = 0;
};


#endif

Hi,
#ifndef : nếu chưa define thì …
#ifdef: nếu đã define thì …
ở đây mình thấy bạn dùng #ifdef , nghĩa là nếu đã define thì tôi sẽ define lại =))
Kĩ thuật này thường dùng để tránh define 2 lần, bật tắt 1 đoạn code theo file config hoặc gì đó mà mình chưa biết =))

#ifndef những phần này đều ở phần tiền xử lí - Preprocessor. Bạn có thể đọc thêm

3 Likes

Nhưng bạn lại dùng #ifdef (không có chữ n).
:thinking:

1 Like

Em copy nhầm code ạ.
-Khi em dùng #ifdef ở 2 file .h đó thì ko chúng bị mất lỗi syntax error: identifier ‘Subject’ Observe
Nhưng đổi lại thì em ko thể kế thừa class đó
class Motorbike: public Observe {…}; bị báo lỗi.
(Cái này thì em nghĩ là do
-Còn khi em dùng #ifndef thì class Motorbike: public Observe {…}; ko bị báo lỗi nhưng mà lại bị báo lỗi
syntax error: identifier ‘Subject’ Observe
–> Em vẫn chưa biết làm thế nào để có thể cùng lức #include “Observe.h” vào “Subject.h” và #include “Subject.h” vào “Observe.h”
Em cảm ơn ạ

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