「参照が曖昧です」とコンパイラーに怒られる原因と対応

目次

  • 経緯
  • 原因と対応

 

一、経緯

 ビルド時に「Rect」と「Point」の参照が曖昧ですとコンパイラーに怒られた。

 調査するとなぜかヘッダーファイルにUSING_NS_CCが書かれている。ヘッダーファイルのUSING_NS_CCを全部削除して、cocosの型を参照している箇所にcocos2d::を追加すると、無事にコンパイルできた。

 

二、原因と対応

 では、なぜ「Rect」と「Point」が曖昧ですって言われたのかというと、ここには全部二つの「Rect」と「Point」型がある。一つはcocos2dに、もう一つはiOS側に定義されている。今回は、コンパイラーはどっちの「Rect」と「Point」を参照しているのかが分からないから、問題が発生した。

 c++言語で名前空間の関数や型を使用する場合は二種類の方法がある。一つは接頭辞を使う方法(cocos2d::のように)、もう一つは予め名前空間を使うと宣言する(using namespace cocos2d/USING_NS_CC)。そして、後者の書き方では今回の問題を起こさせることになる。

 ヘッダーファイルに#include <MacTypes.h>とUSING_NS_CCが同時に書かれていると、どっちを参照しているのかとコンパイラーが混乱してしまうので、基本的にヘッダーファイルでは接頭辞を使用することが望ましい(ヘッダーファイルが長いインクルードチェインに含まれた場合、見つかりにくい欠点も)。