XcodeでCocos2d-xを使い始めたCocominapです。
このフレームワークは使用言語がC++。
なんとなく慣れたObjective-Cや、絶賛拡散中のSwiftではないのですね。
Cocos2d-x や C++に不慣れな私が、サンプルコードを打ち込んでいく中でつまづいたことを書いていきます。
エラー続出
Sprite* hiyoko = Sprite::create("hiyoko.png");
書籍を参考に、スプライトを生成するコードを書いたらエラーでした。
Unknown type name 'Sprite'; did you mean 'cocos2d::Sprite'?
問題の原因はコンパイラが教えてくれていました。
関数名などの衝突を防ぐためにC++で用意されている、名前空間が指定されていなかったのです。
Sprite* hiyoko = cocos2d::Sprite::create("hiyoko.png");
めでたしめでたし。
でも一つ疑問点が。書籍で引用されていたコードには、cocos2d::などという記述はありません。
これはいったい。
名前空間を一括で指定
ググったら、あっけなく解決しました。
using namespace cocos2d
などと書いてあげるだけで、そのファイルの中では、名前空間を指定する必要がなくなります。
ただし、名前衝突防止の仕組みは無効化されるので、複数人で開発する場合などは、気をつけた方がいいかもしれませんね。
私の場合は、小規模なサンプルを作っている段階ですので、とりあえず今回はこれで解決とします。
ではまたー。
###追記1 (2014/6/10)
他のファイルによってインクルードされるファイルにこの記述を使うと、無効化される範囲が広まってしまうので要注意です。ヘッダファイルではなく、cppファイルの冒頭などに記述するのが良いかと思われます。また、より限定された範囲で使いたい場合、特定のスコープの中に記述すればOKです。
@TeamMosa2 さんにご指摘いただきました。ありがとうございます!
###追記2 (2014/6/10)
USING_NS_CC;
がCocos2d-xではより適切のようです。定義元を確認すると、
#define USING_NS_CC using namespace cocos2d
となっており、ご指摘いただきました通り、using namespace〜と同義です。
コメント欄にてご指摘いただいた @giginet さん、ありがとうございます!