Tôi biết rằng các câu hỏi tương tự về điều này đã được hỏi trước nhưng sau khi thực hiện nghiên cứu của tôi, tôi vẫn có câu hỏi về tiêu đề vòng tròn bao gồm.Tiêu đề hình tròn C++ bao gồm
//FooA.h
#ifndef H_FOOA
#define H_FOOA
#include "foob.h"
class FooA{
public:
FooB *fooB;
};
//FooB.h
#ifndef H_FOOB
#define H_FOOB
class FooA;
class FooB{
public:
FooA *fooA;
};
Bây giờ nếu tôi có hai phụ thuộc vòng tròn, đây là cách mà tôi đã thấy mọi người trên stackoverflow gặp vấn đề. Vấn đề duy nhất của tôi với điều này là trong main.cpp của tôi, tôi phải bao gồm fooa.h đầu tiên và sau đó foob.h
//main.cpp the right way
#include "fooa.h"
#include "foob.h"
//main.cpp that will surely get a compile error
#include "foob.h"
#include "fooa.h"
Bây giờ câu hỏi của tôi là "Có cách nào để chuyển tiếp tuyên bố các lớp này trong một cách mà sẽ cho phép tôi không quan tâm đến thứ tự mà tôi bao gồm các tập tin tiêu đề trong main.cpp của tôi? "
Như câu trả lời đã chỉ ra, bạn có thể sử dụng một bản tuyên bố về phía trước trong cả hai tập tin. Nếu tình huống phức tạp hơn, bạn có thể '#include 'fooa.h'' từ 'foob.h', nó sẽ đảm bảo thứ tự bao gồm bạn muốn. –
Không có thông tư nào trong phần bao gồm trong mã ví dụ. Nếu bạn thêm tất cả mọi thứ của endif còn thiếu thì tốt. Bạn đang gặp phải lỗi biên dịch nào? –