编译错误我无法弄清楚

时间:2011-08-14 04:13:22

标签: c++ c compiler-errors

当我尝试使用某个结构时,我知道“数据的存储大小”是不可知的。

代码:

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;
    ...
    }

任何想法?

3 个答案:

答案 0 :(得分:5)

这是因为在编译map.c时,编译器无法在IoHelper.c中看到结构的完整定义。

你可能只包括IoHelper.h,它有(不完整的)声明,而不是定义。

所以除非你

,否则你不能在map.c中声明该结构类型的变量
  • 包括IoHelper.c(BAD IDEA)
  • 将结构定义放在IoHelper.h
  • 在map.c中声明一个指向struct的指针,并将它命名为malloc。

答案 1 :(得分:1)

假设map.c不包含IoHelper.c,它只能看到typedef而不是struct fileValues的声明。因为它没有看到声明,所以无法弄清楚结构有多大,因此编译错误。

通常你会在头文件中声明一个结构 - 将它从iohelper.c移到iohelper.h,map.c现在应该编译。

答案 2 :(得分:0)

data不完整类型。这意味着它没有完全定义,因此其大小未知。在这种情况下,它根本没有被定义,只是声明了。

您需要为声明此类型变量的代码提供定义,例如在函数drawData中。

使用不完整类型可以执行的操作包括将其用作指针或引用类型的基础,并在函数声明中使用它作为结果或按值参数类型(如您所做)。但是你不能做任何需要知道尺寸的事情。声明变量需要知道大小。

欢呼&第h。,