Tôi đang sử dụng thư viện của bên thứ ba C++ để đặt tất cả các lớp của nó trong không gian tên được phiên bản, hãy gọi nó là tplib_v44
. Họ cũng xác định một không gian tên bí danh generic:Bí danh không gian tên C++ và khai báo chuyển tiếp
namespace tplib = tplib_v44;
Nếu một tiền đạo-khai báo một thành viên của thư viện trong file .h của riêng tôi bằng cách sử dụng không gian tên generic ...
namespace tplib { class SomeClassInTpLib; }
... tôi nhận được lỗi biên dịch vào tiêu đề trong thư viện của bên thứ ba (hiện đang được đưa vào sau này trong tập tin thực hiện cpp của tôi):
error C2386: 'tplib' : a symbol with this name already exists in the current scope
Nếu tôi sử dụng không gian tên phiên bản cụ thể, sau đó tất cả mọi thứ hoạt động tốt, nhưng sau đó .. . w mũ là điểm? Cách tốt nhất để giải quyết vấn đề này là gì?
[EDIT] FYI cho người xem trong tương lai, đây là thư viện ICU. Một giải pháp (ít nhất là trong tình huống của tôi) là trong các ý kiến cho câu trả lời được chấp nhận.
Điều này rất gần với những gì đã kết thúc với tôi. Khi nó bật ra, thư viện của tôi (thư viện ICU) có một tiêu đề nhỏ (uversion.h) - trong số những thứ khác - định nghĩa bí danh không gian tên. Nếu tôi đưa tiêu đề này vào tiêu đề của mình thì tôi có thể sử dụng macro không gian tên phiên bản mà họ xác định (U_ICU_NAMESPACE) trong tệp tiêu đề của tôi và thoát khỏi vùng tên chung trong tệp cpp của tôi. Vì vậy, tôi được cách ly từ những thay đổi cho không gian tên được phiên bản với các phụ thuộc biên dịch thời gian tối thiểu. –