Sto usando una libreria che ha una sola differenza tra piattaforme/versioni. Una versione chiama la classe btCollisionObject e altre versioni lo chiamano btCollisionObjectWrapper. Se potessi fare in modo che questa classe avesse due nomi che fanno ancora riferimento a quella classe, allora tutti i miei problemi sarebbero risolti. Ho provato: #define btCollisionObject btCollisionObjectWrapper;
ma non funziona. Qual è il modo corretto di assegnare due nomi di classe dopo che la classe è stata definita?Come fare che una classe abbia due nomi?
risposta
Forse
typedef btCollisionObjectWrapper btCollisionObject;
meglio farlo utilizzando strumenti linguistici invece del preprocessore.
errore C2371: 'btCollisionObjectWrapper': ridefinizione; diversi tipi di base – SteveDeFacto
@SteveDeFacto Perché stai utilizzando entrambe le versioni della libreria contemporaneamente? –
@SteveDeFacto: Immagino che volevi farlo in un altro modo, allora? –
Se ho capito bene il tuo problema, dovrai trovare un modo per determinare quale piattaforma stai compilando, perché non so quali piattaforme stai usando Non posso dare alcun consiglio su questo, ma probabilmente è possibile farlo tramite macro.
La soluzione al tuo problema sarà probabilmente simile a questa.
In C++ 98 utilizzando una dichiarazione tipo
#ifdef __PLATFORM_SPECIFIC_DEFINE
typedef btCollisionObjectWrapper btCollisionObject;
#endif
In C++ 11 utilizzando una dichiarazione alias, ciò ha il vantaggio che essi possono essere usati con i modelli tuttavia nel caso potresti cavartela con un semplice typedef.
#ifdef __PLATFORM_SPECIFIC_DEFINE
using btCollisionObject = btCollisionObjectWrapper;
#endif
Questo vi permetterà di utilizzare btCollisionObject
come il nome della classe per la piattaforma che utilizza btCollisionObjectWrapper
Sarà ovviamente necessario sostituire la __PLATFORM_SPECIFIC_DEFINE
con una macro che viene definito dalla piattaforma che utilizza btCollisionObjectWrapper
.
hanno anche il vantaggio di essere più "simili a C++" in quanto enfatizzano i tipi in contrasto con le espressioni nel modo in cui la sintassi della dichiarazione C enfatizza le espressioni. – bames53
Voglio sapere esattamente qual è la differenza tra un'istruzione 'typedef' e una' using'. Puoi indicarmi un sito web/qualunque cosa, il che spiega la differenza? Lo farà anche un'espressione di ricerca su google che porta al risultato corretto. – leemes
Non sono al 100% su tutte le differenze in quanto non l'ho mai visto io stesso, l'unica differenza menzionata su [cppreference] (http://en.cppreference.com/w/cpp/language/typedef) dove ho appreso della 'dichiarazione alias' è che può essere usato quando si crea un alias di un modello. – ctor
- 1. Come faccio a fare in modo che una classe abbia la precedenza su un ID?
- 2. jQuery: trova un ultimo figlio che abbia una classe specifica
- 3. Che cosa significa quando una dichiarazione di classe sembra avere due nomi?
- 4. Come posso verificare che una classe non abbia argomenti di costruzione
- 5. Come selezionare un elemento html con due nomi di classe?
- 6. È possibile che l'immagine abbia più tag?
- 7. Una classe con 2 nomi?
- 8. È possibile che Javascript abbia una funzione come testo?
- 9. Come posso fare in modo che un pulsante abbia un bordo arrotondato in Swift?
- 10. Seleziona elemento meno che non abbia un antenato di una data classe utilizzando solo un selettore
- 11. Non è possibile che una classe abbia istanze di membro del contesto constex statico?
- 12. come fare riferimento correttamente una classe da XAML
- 13. Come posso fare in modo che il mio leaflet Shiny abbia height = "100%" all'interno di una pagina navbar?
- 14. Come posso fare in modo che una casella combinata WPF abbia la larghezza del suo elemento più largo in XAML?
- 15. Assicurarsi che la tabella SQLite abbia solo una riga
- 16. ExecuteNonQuery richiede che il comando abbia una transazione
- 17. È possibile che una tabella SQL abbia zero colonne?
- 18. Due file CSS che definiscono stessa classe
- 19. fare una classe immutabili in Java
- 20. Posso fare una query SQL fare due fiammiferi su ogni riga?
- 21. Perché Android richiede che il nome del pacchetto abbia almeno due identificatori?
- 22. Una classe può estendere sia una classe che implementare un'interfaccia
- 23. Come fare una classe di modello osservabile in WPF
- 24. che una classe completamente vuota
- 25. È necessario che SqlTransaction abbia chiamato Dispose?
- 26. Come fare un iteratore fuori di una classe ES6
- 27. Come creare una classe Java che implementa un'interfaccia con due tipi generici?
- 28. Utilizzo di validatori per garantire che l'utente abbia riempito uno dei due campi obbligatori
- 29. Come rifattorizziamo una classe che è serializzato nel .NET?
- 30. PHP unire due nomi variabili
Potrebbe essere perché hai un punto e virgola nel tuo #define, che (molto probabilmente) non dovrebbe essere lì? –