web-dev-qa-db-ja.com

このエラーの意味:「エラー: 'type_name'の前に指定子修飾子リストが必要です」?

私は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;
50
Paul Wicks

コンパイラは、spe_context_ptr_tが型であることを知りません。このコードをコンパイルするときに、適切なtypedefがスコープ内にあることを確認してください。適切なヘッダーファイルを含めるのを忘れている可能性があります。

61
Trent

同じエラーメッセージが表示されましたが、解決策は異なります。

コンパイラはファイルを上から下に解析します。

別の構造体に使用する前に、構造体が定義されていることを確認してください。

typedef struct
{
    char name[50];
    wheel_t wheels[4]; //wrong, wheel_t is not defined yet
} car_t;

typedef struct
{
    int weight;
} wheel_t;
4
Icegras

IPhoneココアタッチプロジェクトの場合:

この問題が発生し、Eric Farraroのコメントのおかげで、解決することができました。他の多くのクラスでクラスWSHelper.hをインポートしていました。しかし、私はWSHelper.h(エリックが言ったように循環)でそれらの同じクラスのいくつかをインポートしていました。したがって、これを修正するために、WSHelper.hファイルからインポートをWSHelper.mファイルに移動しました。とにかく.hファイルでは本当に必要ないためです。

2
Brad

Gorgandoの修正プログラムを使用してこれを整理することができましたが、インポートを移動する代わりに、個別にコメントアウトし、アプリをビルドして、それらを削除するまで適宜編集しました。

0
Ryan

私はインポートループでそれを得ました:

---FILE B.h
#import "A.h"
@interface B{
  A *a;
}
@end

---FILE A.h
#import "B.h"
@interface A{      
}
@end
0
Daniel

次のように構造体に名前を付ける必要があります。

typedef struct car_t {

   char

   wheel_t

} car_t;
0
Typen

@simpleBob

---FILE B.h
#import "A.h"
@interface B{
  A *a;
}
@end

---FILE A.h

@class B;

@interface A{      
}
@end

上記のコードはそれを整理するのに役立ちました。誰かがここで何が起こっているのか説明できますか?

0
ymutlu