「参照が曖昧です」とコンパイラーに怒られる原因と対応
目次
- 経緯
- 原因と対応
一、経緯
ビルド時に「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が同時に書かれていると、どっちを参照しているのかとコンパイラーが混乱してしまうので、基本的にヘッダーファイルでは接頭辞を使用することが望ましい(ヘッダーファイルが長いインクルードチェインに含まれた場合、見つかりにくい欠点も)。