2009-03-03 69 views
50

我一直在工作的單元處理器,我試圖創建一個結構,將舉行一個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中看到這個,請注意。 – 2010-03-03 07:50:11

+0

謝謝,回覆後看到了。但你能解釋爲什麼這是行得通的嗎? – ymutlu 2012-03-30 13:36:51

4

我有相同的錯誤信息,但解決方案是不同的。

編譯器從上到下解析文件。

確保一個結構定義使用到另一個BEFORE:

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

你命名你的結構類似:

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

對於iPhone可可觸摸項目:

我有這個問題,並感謝埃裏克·法拉羅的評論,我能夠解決它。我在許多其他類中導入了一個WSHelper.h類。但我也在WSHelper.h中導入了一些相同的類(像Eric所說的那樣)。所以,爲了解決這個問題,我將導入從WSHelper.h文件移動到我的WSHelper.m文件,因爲它們在.h文件中並不真正需要。

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

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

我有進口環得到了它直到我擺脫他們。上述

0

我能夠使用Gorgando的修復整理了這一點,但不是移動進口了,我評論每個單獨發佈,內置的應用程序,然後相應地編輯:

0

@simpleBob

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

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

代碼幫我整理出來。有人能解釋這裏發生了什麼嗎?

-1

這個錯誤基本上出現在使用它之前使用對象。

相關問題