2013-11-23 90 views
1

我正在做家庭作業。家庭作業錯誤:取消引用指向不完整類型的指針

我在這個任務中遇到了標題錯誤。從我目前看到的內容來看,我知道結構定義在某處存在問題,但由於這是由我的教授完成的,所以我傾向於認爲這與我調用結構的方式有關。 這裏是相關的代碼。

main.c中

(其中我發現了從錯誤中):

#include "processes.h" 
//... 
Processes * proc = proc_create(filename); //line 90 
              // the struct I'm trying to create 
//... 
for(i = 0; i < proc->size; i++) // line 100, where I get the first error of 
           // dereferencing pointer to an incomplete type 
{ 
//Some code 
} 

在processes.c(其中結構進程的定義):在processes.h

struct Processes{   
    struct Proc *array;  // array of Processes 
    int internal_size;  // how big the array is total 
    int size;    // how many valid Procs in the array 
}; 

typedef struct Processes Processes; 
// Create your Processes struct using the filename of a schedule.txt 
Processes * proc_create(char *filename); 

如果有人可以請向我解釋一下,這個錯誤的意思是什麼,並指出我在正確的方向fi興它,這將不勝感激!此外,如果您需要其他任何內容,我很樂意發佈其他代碼。我很確定這是相關的代碼。

+2

將您的'struct Processes'的定義從您的源文件移動到您的標題。 –

回答

4

由於頭文件不包含Processes結構的完整定義(只有前向聲明),因此編譯器不可能知道如何訪問其成員。因此,proc->size在main.c文件中沒有意義。如果你想直接使用它的成員,你將不得不將結構的整個定義移動到頭文件中。 (或者,如果創建一個不透明的類型是您的關心,然後寫一個訪問函數,只是返回proc->size


此外,您proc_create()功能或許應該採取const char *說法。

+0

你知道爲什麼C不能從.c文件訪問嗎?或者在那裏包含.c文件而不是.h文件?比如,有沒有辦法在另一個程序中生成Processes結構,而不在頭文件中包含定義? –

+0

@DerekHalden不,沒有。而且它沒有看到這個聲明,因爲......好吧,這是一個很長的故事。重點在於定義需要在編譯時可見,用於代碼生成(以便編譯器能夠推斷和使用內存偏移量)。鏈接時間太晚了。 – 2013-11-23 21:32:37

+0

好吧,現在我得到一個錯誤,以「未定義的引用'proc_create'。這就是爲什麼我想知道是否有一個不同的問題,我失蹤了? –

相關問題