17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cocos2d-xで最初につまづいたこと

Last updated at Posted at 2014-06-09

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 さん、ありがとうございます!

17
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?