プラットフォーム/バージョンの違いが1つだけあるライブラリを使用しています。あるバージョンはbtCollisionObjectクラスを呼び出し、他のバージョンはbtCollisionObjectWrapperを呼び出します。このクラスにこのクラスを参照する2つの名前を付けることができれば、すべての問題は解決されます。私は試みた:#define btCollisionObject btCollisionObjectWrapper;
しかし、それは動作していません。クラスが定義された後にクラスに2つの名前を付ける正しい方法は何ですか?1つのクラスに2つの名前を付けるにはどうすればいいですか?
答えて
たぶん
typedef btCollisionObjectWrapper btCollisionObject;
より良い言語ツールの代わりに、プリプロセッサを使用して、それを行うには。
エラーC2371: 'btCollisionObjectWrapper':再定義。異なる基本タイプ – SteveDeFacto
@SteveDeFactoなぜあなたは同時にライブラリの両方のバージョンを使用していますか? –
@SteveDeFacto:あなたはそれを他の方法でやろうと思ったのですか? –
私があなたの問題を正しく理解していれば、使用しているプラットフォームがわからないため、どのプラットフォームをコンパイルするのかを判断する方法を見つけなければならないでしょう。マクロを使ってそうすることができます。
問題の解決策は、おそらくこのように見えます。 C++ 98では
エイリアス宣言を使用してC++ 11に型宣言
#ifdef __PLATFORM_SPECIFIC_DEFINE
typedef btCollisionObjectWrapper btCollisionObject;
#endif
を使用し、これは彼らが自分の場合しかしテンプレートを使用することができるという追加の利点を有していますあなたは単純なtypedefを手に入れることができます。
#ifdef __PLATFORM_SPECIFIC_DEFINE
using btCollisionObject = btCollisionObjectWrapper;
#endif
これは、あなたが、もちろんbtCollisionObjectWrapper
を使用して、プラットフォームによって定義されたマクロで__PLATFORM_SPECIFIC_DEFINE
を交換する必要がありますbtCollisionObjectWrapper
使用するプラットフォーム用のクラス名としてbtCollisionObject
を使用できるようになります。
型のエイリアスは、C宣言構文が式を強調する方法とは対照的に、型を強調する点で、より「C++のような」利点があります。 – bames53
'typedef'と' using'ステートメントの違いは何ですか?違いを説明しているウェブサイト/何でも教えていただけますか?正しい結果につながるGoogleの検索式もこれを行います。 – leemes
[cppreference](http://en.cppreference.com/w/cpp/language/typedef)で言及されている唯一の違いは、私が実際にそれを調べていないので、私はすべての違いについて100%私が最初に 'エイリアス宣言 'を学んだのは、テンプレートのエイリアスを作るときに使われるということです。 – ctor
- 1. 2つの* .txtファイルで等しい名前を見つけるにはどうすればよいですか?
- 2. クラスの名前をつけて、クラスに名前を付けて属性を付けたり、その属性をクラス名に入れていいのですか?
- 3. ノードに名前を付けるにはどうすればいいですか?
- 4. ファイルに名前を付けるにはどうすればいいですか?
- 5. 2つの日付ピッカーを1つのhtmlコンタクトフォームに含めるにはどうすればいいですか?
- 6. javascript/es6で2つのクラスを同じ名前でインポートするにはどうすればよいですか?
- 7. 同じマシンで2つの名前付きパイプを開くにはどうすればいいですか?
- 8. 属性を使用するクラスに名前を付けるにはどうすればいいですか?
- 9. Oracleで名前付き制約の定義を見つけるにはどうすればよいですか?
- 10. Rの名前付きリストを2つ作成するにはどうすればよいですか?
- 11. SSRS - データセットに同じ名前の2つのフィールドを入れるにはどうすればいいですか?
- 12. TCLで2つの変数名を1つの名前に連結するにはどうすればいいですか?
- 13. 複数の列を1つの列に貼り付けるにはどうすればいいですか?
- 14. 2つのループを1つに入れ子にするにはどうすればいいですか?
- 15. JavaScriptとCSSについてはどのようにクラスに名前を付けますか?
- 16. 2つのUIPickerViewを1つのViewControllerで一緒にするにはどうすればいいですか?
- 17. ormliteで2つのフィールドを1つの主キーにするにはどうすればいいですか?
- 18. 2つのビューアニメーションを1つずつ実行するにはどうすればいいですか?
- 19. クラス名と名前空間の競合を避けるにはどうすればいいですか?
- 20. 2つのfirebaseプロジェクトを1つのAndroidアプリに接続するにはどうすればいいですか?
- 21. どのようにViewModelクラスに名前を付けますか?
- 22. 1つのフォームと「新しい」アクションで2つの異なるクラスの2つのオブジェクトを作成するにはどうすればよいですか?
- 23. 1つのタグに複数のタグをタグ付けするにはどうすればよいですか?
- 24. 1つのクラス変数に他のクラスにアクセスするにはどうすればいいですか?
- 25. 1つのポインタを受け付ける関数に2つの別個の構造体を渡すにはどうすればよいですか?
- 26. htmlのラジオ・グループのリストにラジオの名前を付けるにはどうすればいいですか?
- 27. Javaで同様の意味を持つクラスの名前を付けるにはどうすればいいですか?
- 28. フレックスボックス、フレックスアイテムの1つに2つの行を含めるにはどうすればいいですか?
- 29. 1つのテンプレートに2つ以上のモデルを含めるにはどうすればいいですか?
- 30. Crontab - 平日の後にバックアップファイルに名前を付けるにはどうすればいいですか?
#defineにセミコロンがある可能性があります(おそらく)そこにはないはずですか? –