私はCellプロセッサで作業しており、spe_context_ptr_t
を保持する構造体を作成しようとしています。この構造体はスレッド内でspeコンテキストを起動し、他の何かへのポインタも保持しますスレッド内からspuコンテキストに渡されます(現在は、単に汎用ポインターにしようとしていますが、実際には、定義した別の構造体へのポインターになります)。コンパイルしようとすると、次のエラーが表示されます。
spu/../common.h:38: error: expected specifier-qualifier-list before 'spe_context_ptr_t'
// here is the offending line(s)
typedef struct _PTHREAD_BLOCK {
spe_context_ptr_t * context; // Error happens here
uintptr32_t args;
} PTHREAD_BLOCK;
コンパイラは、spe_context_ptr_tが型であることを知りません。このコードをコンパイルするときに、適切なtypedefがスコープ内にあることを確認してください。適切なヘッダーファイルを含めるのを忘れている可能性があります。
同じエラーメッセージが表示されましたが、解決策は異なります。
コンパイラはファイルを上から下に解析します。
別の構造体に使用する前に、構造体が定義されていることを確認してください。
typedef struct
{
char name[50];
wheel_t wheels[4]; //wrong, wheel_t is not defined yet
} car_t;
typedef struct
{
int weight;
} wheel_t;
IPhoneココアタッチプロジェクトの場合:
この問題が発生し、Eric Farraroのコメントのおかげで、解決することができました。他の多くのクラスでクラスWSHelper.hをインポートしていました。しかし、私はWSHelper.h(エリックが言ったように循環)でそれらの同じクラスのいくつかをインポートしていました。したがって、これを修正するために、WSHelper.hファイルからインポートをWSHelper.mファイルに移動しました。とにかく.hファイルでは本当に必要ないためです。
Gorgandoの修正プログラムを使用してこれを整理することができましたが、インポートを移動する代わりに、個別にコメントアウトし、アプリをビルドして、それらを削除するまで適宜編集しました。
私はインポートループでそれを得ました:
---FILE B.h
#import "A.h"
@interface B{
A *a;
}
@end
---FILE A.h
#import "B.h"
@interface A{
}
@end
次のように構造体に名前を付ける必要があります。
typedef struct car_t {
char
wheel_t
} car_t;
@simpleBob
---FILE B.h
#import "A.h"
@interface B{
A *a;
}
@end
---FILE A.h
@class B;
@interface A{
}
@end
上記のコードはそれを整理するのに役立ちました。誰かがここで何が起こっているのか説明できますか?