2014-07-15 23 views
0

它是我的第一本出版物,我現在正在研究C編程,因此我不是專家。編譯器:線程應用程序中的「錯誤:解除引用指向不完整類型的指針」

我遇到這個錯誤編寫本線(在一個線程):

... 
struct task_par *tp; 
tp = (struct task_par *)arg; 
a = tp->arg; 
... 

結構task_par是:

typedef struct 
{ 
    int arg; 
    int period; 
    int priority; 
} task_par; 

注意, 「ARG」 是線程的參數

「a」的正確類型是什麼?因爲我已經嘗試過所有類型,而且仍然是「錯誤」,那麼還有什麼錯誤?

+0

移動關於引用結構成員的代碼的結構定義。 –

+0

@Doozer發佈*全部*相關的代碼,猜測錯誤不是很有趣... – Scis

回答

1

您沒有用您所顯示的代碼定義struct task_par。你正在定義的是一個名爲task_partypedef(一種新類型),它是某個匿名結構類型的別名。

在這種情況下,您的變量定義應該簡單地說爲task_par *tp;。如果你喜歡使用struct task_par,你現在的樣子,你應該你的結構定義修改爲:

struct task_par 
{ // ... 
} 

或者你也可以將二者結合起來:

typedef struct task_par 
{ // ... 
} task_par_t; 

然後,你可以任意定義變量如struct task_par *tp;task_par_t *tp;

底線是結構名稱和typedef名稱存在於兩個不同的名稱空間中。你甚至可以做typedef struct foo { /* */ } foo;,但有些人認爲由於潛在的混淆可能導致錯誤的形式...

相關問題