Tôi đang sử dụng thư viện chỉ có một sự khác biệt giữa các nền tảng/phiên bản. Một phiên bản gọi lớp btCollisionObject và các phiên bản khác gọi nó là btCollisionObjectWrapper. Nếu tôi có thể làm cho lớp này có hai cái tên vẫn còn tham chiếu đến lớp đó thì mọi vấn đề của tôi sẽ được giải quyết. Tôi đã thử: #define btCollisionObject btCollisionObjectWrapper;
nhưng nó không hoạt động. Cách chính xác để cung cấp cho một lớp hai tên sau khi lớp đã được xác định là gì?Làm thế nào để làm cho một lớp có hai tên?
Trả lời
lẽ
typedef btCollisionObjectWrapper btCollisionObject;
Tốt hơn để làm điều đó bằng các công cụ ngôn ngữ, thay vì Preprocessor.
lỗi C2371: 'btCollisionObjectWrapper': định nghĩa lại; các loại cơ bản khác nhau – SteveDeFacto
@SteveDeFacto Tại sao bạn sử dụng cả hai phiên bản của thư viện cùng một lúc? –
@SteveDeFacto: Tôi đoán bạn có ý định làm điều đó theo cách khác? –
Nếu tôi hiểu vấn đề của bạn một cách chính xác, bạn sẽ phải tìm cách xác định nền tảng nào bạn đang biên dịch, vì tôi không biết bạn đang sử dụng nền tảng nào mà tôi không thể đưa ra lời khuyên nào có thể làm như vậy thông qua các macro.
Giải pháp cho vấn đề của bạn có thể sẽ giống như thế này.
Trong C++ 98 sử dụng một tuyên bố loại
#ifdef __PLATFORM_SPECIFIC_DEFINE
typedef btCollisionObjectWrapper btCollisionObject;
#endif
Trong C++ 11 sử dụng một tuyên bố alias, điều này có lợi thế nhất mà họ có thể được sử dụng với các mẫu tuy nhiên trong trường hợp của bạn bạn có thể lấy đi với một typedef đơn giản.
#ifdef __PLATFORM_SPECIFIC_DEFINE
using btCollisionObject = btCollisionObjectWrapper;
#endif
này sẽ cho phép bạn sử dụng btCollisionObject
như tên lớp cho các nền tảng sử dụng btCollisionObjectWrapper
Bạn sẽ đương nhiên phải thay thế __PLATFORM_SPECIFIC_DEFINE
với một vĩ mô được xác định bởi các nền tảng sử dụng btCollisionObjectWrapper
.
bí danh loại cũng có lợi thế là có nhiều hơn 'C++ - like' ở chỗ chúng nhấn mạnh các kiểu trái với biểu thức cách cú pháp khai báo C nhấn mạnh biểu thức. – bames53
Tôi muốn biết chính xác sự khác biệt giữa câu lệnh 'typedef' và' using' là gì. Bạn có thể xin vui lòng chỉ cho tôi một trang web/bất cứ điều gì, mà giải thích sự khác biệt? Biểu thức tìm kiếm trên google dẫn đến kết quả chính xác cũng sẽ thực hiện. – leemes
Tôi không phải là 100% trên tất cả các sự khác biệt vì tôi đã không thực sự nhìn vào nó bản thân mình, sự khác biệt duy nhất được đề cập trên [cppreference] (http://en.cppreference.com/w/cpp/language/typedef) nơi tôi lần đầu tiên học về 'khai báo bí danh' là nó có thể được sử dụng khi tạo một bí danh của một khuôn mẫu. – ctor
- 1. Nhập hai lớp có cùng tên. Làm thế nào để xử lý?
- 2. Làm thế nào để có được một "tên tiếng Anh" cho một nhân vật?
- 3. Làm thế nào để có được tên của một lớp của một phương thức như NSString?
- 4. Làm cách nào để đặt tên cho tệp ruby Rails có tên lớp có số?
- 5. PHP: Làm thế nào để kết hợp hai lớp này?
- 6. Làm thế nào để có được (sub) tên lớp từ một phương pháp tĩnh trong Python?
- 7. Làm thế nào để có được tên của một lớp Ruby?
- 8. Làm cách nào để nhập hai lớp có cùng tên trong các gói khác nhau?
- 9. Regex: Làm thế nào để có được một tên nhóm
- 10. Làm thế nào để có điều kiện làm cho một lớp css với knockoutjs
- 11. Làm thế nào để có được tên của một tài sản lớp học?
- 12. Làm cách nào để đặt tên cho các lớp ViewModel?
- 13. Làm thế nào để sử dụng hai lớp học không thể phân biệt có cùng tên đầy đủ?
- 14. Làm thế nào để có được cá thể mô-đun cho một lớp bằng Python?
- 15. Làm thế nào để có được tất cả các tên lớp trong một không gian tên trong Ruby?
- 16. Làm thế nào để thực hiện một deserialize lớp như một cái tên khác
- 17. Làm thế nào để đổi tên một gói trong symfony?
- 18. Làm thế nào để chuyển đổi một văn bản chuỗi thành một tên lớp
- 19. Python: Hai gói có cùng tên; làm thế nào để bạn xác định được nạp?
- 20. làm thế nào để chạy các lớp java với có tên gói
- 21. Làm thế nào để thiết lập tên lớp cho đối tượng JavaScript
- 22. Làm thế nào để làm cho Class.getMethod() ném một SecurityException
- 23. Làm thế nào để tạo hai lớp trong C++ sử dụng lẫn nhau làm dữ liệu?
- 24. Làm thế nào tôi có thể làm cho một lớp lót này hoạt động trong DOS?
- 25. Làm thế nào để kết hợp hai procs thành một?
- 26. Làm thế nào để gọi một lớp trợ giúp Magento
- 27. Làm thế nào để làm cho đối tượng PHP stdClass có cùng tên?
- 28. Làm thế nào để có được tên lớp sử dụng jquery
- 29. Làm thế nào để đặt tên cho cột đầu tiên giấu tên của một data.frame
- 30. Làm thế nào để tham khảo một tên lớp dài với không gian trong CSS?
Có thể là do bạn có dấu chấm phẩy trong #define của mình, trong đó (rất có thể) không nên ở đó? –