Tôi có nhiều mã trong C++, ban đầu được xây dựng trên PC. Tôi đang cố gắng làm cho nó hoạt động với Objective-C trên máy Mac. Để kết thúc, tôi tạo ra một khung Objective-C để chứa mã C++ và thêm một wrapper mỏng. Nhưng tôi đang chạy vào một vấn đề typedef trong mã C + + của tôi.Sử dụng C++ với Objective-C, Làm cách nào để khắc phục "Khai báo xung đột" typedef int BOOL '"?
Khi tôi đang làm việc với C++ trên PC, tôi đã sử dụng biến số BOOL
được xác định trong WinDef.h. Vì vậy, khi tôi di chuyển mọi thứ trên máy Mac, tôi đã thêm vào typedef int BOOL;
để đảm bảo biến số BOOL
vẫn sẽ biên dịch như mong đợi.
Nhưng khi tôi cố gắng biên dịch, tôi gặp lỗi: "Conflicting declaration 'typedef int BOOL'
". Tôi cho rằng điều này là bởi vì BOOL
là một từ khóa trong Mục tiêu-C, và do đó đã được xác định. Tôi cũng không thể chỉ sử dụng Objective-C BOOL
vì nó là một unsigned char và không phải là int.
Trong khi tôi đang tìm kiếm các giải pháp có thể, tôi tìm thấy one đề cập đến undefining BOOL, nhưng tôi không thể tìm cách thực hiện điều đó (cũng không biết liệu nó có hoạt động không). Another gợi ý đổi tên BOOL trong các tệp C++ thành một thứ không phải là từ khóa. Đề xuất này không phải là một lựa chọn cho tôi vì các dự án khác dựa vào mã C++. Lý tưởng nhất, bất kỳ thay đổi nào tôi thực hiện phải ở trong một tệp hoặc ít nhất không nên tác động tiêu cực đến mã trên máy tính Windows.
Làm cách nào để xác định định nghĩa mục tiêu C của BOOL cho các tệp C++ của tôi và sử dụng định nghĩa C++ mà tôi đã thêm? Có cách nào tốt hơn để giải quyết vấn đề này không?
Trong trường hợp nó giúp Tôi đang sử dụng: Xcode 3.2.5, phiên bản 64-bit và Mac OS X 10.6.6
Thanks cho bất kỳ hướng dẫn!
Tại sao bạn sử dụng 'BOOL' ngay từ đầu? C++ đã có kiểu 'bool'. –
Bởi vì trên Windows, nhiều API sử dụng kiểu BOOL, được định nghĩa bởi Windows, mà thực sự là một int. Nó không tương thích với BOOL, đặc biệt là nếu nó không phải là một phần của cấu trúc phải được chuyển tới một API như vậy (Trên Windows, bool có kích thước byte và BOOL là bốn byte). –