2009-03-03 9 views
50

私はCellプロセッサで作業していましたが、spe_context_ptr_tを保持する構造体を作成しようとしています。この構造体は、スレッド内でspeコンテキストを起動するために使用され、他のものへのポインタも保持しますスレッド内からspuコンテキストに渡されます(現在、私は一般的なポインタにしようとしていますが、実際には定義した別の構造体へのポインタになります)。コンパイルしようとすると、次のエラーが発生します。このエラーはどういう意味ですか? "エラー: 'type_name'の前に予期される指定子 - 修飾子リスト?

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; 

答えて

61

コンパイラはspe_context_ptr_tが型であることを知らない。このコードがコンパイルされたときに、適切なtypedefが有効範囲内にあることを確認してください。適切なヘッダーファイルを含めるのを忘れているかもしれません。

+51

私の場合(iPhoneプロジェクトの場合)、問題は、私が循環依存を引き起こしていると思われるような方法でヘッダーを含めていることでした。 @classパラメータを使って.hファイル内でクラスを事前に宣言することで解決しました。私がこれをした後、循環依存性は解決され、このエラーは消え去った。 誰かがXCode/Obj-Cでこれを見ている場合は、ちょっとメモしておきます。 –

+0

ありがとう、それは応答後に見た。しかし、なぜこれが作品で、どのように説明できますか? – ymutlu

4

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

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

構造体が別のものにそれを使用する前に定義されていることを確認します:

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

typedef struct 
{ 
    int weight; 
} wheel_t; 
+0

この例を使用して、代わりにソリューションを表示します(または同様に) –

0

あなたはそのようなあなたのstruct名前を付ける必要があり:iPhoneココアタッチプロジェクトの場合

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

を:

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

0

私は輸入ループでそれを得た:私はGorgandoの修正を使用して、これを整理することができましたが、代わりに離れて輸入を移動するので、私はそれに応じて編集し、アプリを構築し、個々をコメントアウト

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

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

私がそれらを取り除くまで。

0

@simpleBob

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

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

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

-1

このエラーは、オブジェクトを使用する前にこのオブジェクトを使用すると基本的に発生します。

関連する問題