テスト駆動でゲーム開発はできるのか?

ゲームの開発にテスト駆動開発を取り入れてみる検証のブログです

今度はshared_ptrが使えない

仕事が忙しくしばらく間が空いてしまいましたが、一段落したので開発の続きを行います。

次はCollisionDitectionクラスにコリジョンの登録と削除のテストを書く事にしたのですが
登録するコリジョンをshared_ptrで扱おうとしたところ、またビルドエラーになってしまいました。
どうやら標準ライブラリがC++11に対応しておらず、shared_ptrを扱えなかった様です。

ですが、C++ Standerd Libraryの項目を libc++(LLVM C++ standard library with C++ 11 support) に変えると
shared_ptrは使えますが、今度は以前に出たASSERT_EQのリンクエラーが発生してしまいます。

ASSERT_EQのリンクエラーを回避したときは根本原因はわかっておらず、とりあえずエラーが出ない状態にしただけでしたので
きちんと根本原因を解決しないと、ASSERT_EQとshared_ptrの両方を使う事は出来ない様です。

原因を調べていくとgootle testのビルド設定に原因が有りました。
どうやら古いOSにも対応するため、C++11はサポートされていなかった様です。
ですので、C++11に対応できるように

Deployment 項目の OS X Deployment Target をC++11に対応できるOS X 10.7に変更して
Apple LLVM 5.1 - Language - C++ 項目の C++ Language Dialect を C++11に変更
同じ項目の C++ Standerd Library を libc++(LLVM C++ standard library with C++ 11 support) に変更しました。

適当なコードを書いて確認しましたが、これでASSERT_EQとshared_ptrの両方を使うことが出来るようになりました。

今回のビルドエラーの一番の原因はgoogle testのデフォルトの設定から変更していないから正しいはずと思い込み
ASSERT_EQのリンクエラーの時にgoogle test側をきちんと調べなかった事ですね。

今回のタグは以下になります。
blog_20140316