2010-06-07

iPhoneアプリ開発: Expected specifier-qualifier-list before ... error

ビルド時に、
Expected specifier-qualifier-list before xxx error
なエラーが発生した場合の対処方法です。
※「xxx」には実際のコード内の文字列が入ります

エラーの直接の意味としては、「xxx」という文字列の前に、指定子・限定子(例えばクラス名やintなどの型限定子)がいるんじゃないの?というものです。

このエラーに至るストーリー例:
1. ヘッダファイルのimportし忘れ
2. 「xxx」という名前のクラス/型定義が見つからない
3. 「xxx」がよくわからない文字列だけど変数かな?
4. 「xxx」の前にとりあえず型指定してよ(エラー表示)

ちょっとした関係なさそうなミスでも、このエラーが出ることがあるので、たまにハマります。
原因として実際にあったこと:
・ヘッダファイルの import し忘れ
・ビルド時のデバイス指定を、本来「Device」でしかビルドできないプロジェクトに対して、「Simulator」にしていた
・ClassA.h と ClassB.h で循環importしていた(下の例参照)

ClassA.h
#import "ClassB.h"
...

ClassB.h
#import "ClassA.h" //BUILD ERROR!!
...

※この場合、どちらかのimport文が必要ないようにコードを書き換え(例えばdelegateの利用等に置き換える)、import文を削除するようにします。

1 件のコメント:

shinichirou さんのコメント...

@class クラス名;
でクラスだと教えてやってもいいかも