当我尝试使用某个结构时,我得到了一个“‘data’的存储大小未知”的提示。
代码:
ioHelper.h:
#ifndef IOHELPER_H_
#define IOHELPER_H_
typedef struct fileValues data;
struct fileValues ioInput(FILE* file,int dim,int sign);
#endif /* IOHELPER_H_ */
ioHelper.c:
struct fileValues
{
int dim;
char sign;
double x;
double y;
};
map.c:
void drawData(FILE* vectors)
{
double paramLoc [MAX_DIMENSION];
char sign;
(this is where i get the error) struct fileValues data;
...
}
有什么想法吗?
发布于 2011-08-14 12:15:49
这是因为在编译map.c时,编译器无法在IoHelper.c中看到结构的完整定义。
您可能只包含了IoHelper.h,它有(不完整的)声明,没有定义。
因此您不能在map.c中声明该结构类型变量,除非您
发布于 2011-08-14 12:18:28
假设map.c没有包含IoHelper.c,它只会看到fileValues,而不会看到struct typedef的声明。因为它没有看到声明,所以它不能确定结构有多大,因此出现了编译错误。
通常你会在一个头文件中声明一个struct --把它从iohelper.c移到iohelper.h,map.c现在就应该被编译了。
发布于 2011-08-14 12:20:54
data
是不完整的类型。这意味着它没有完全定义,所以它的大小是未知的。在这种情况下,它根本没有定义,只是声明了。
您需要为声明此类型变量的代码提供一个定义,例如在函数drawData
中。
可以对不完整类型执行的操作包括将其用作指针或引用类型的基类型,以及在函数声明中将其用作结果或按值参数类型(如您所做的)。但是你不能做任何需要知道大小的事情。声明一个变量需要知道它的大小。
干杯&哈。
https://stackoverflow.com/questions/7054961
复制相似问题