2013-11-23 55 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'。这就是为什么我想知道是否有一个不同的问题,我失踪了? –

相关问题