首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译错误,我找不到

编译错误,我找不到
EN

Stack Overflow用户
提问于 2011-08-14 12:13:22
回答 3查看 165关注 0票数 2

当我尝试使用某个结构时,我得到了一个“‘data’的存储大小未知”的提示。

代码:

ioHelper.h:

代码语言:javascript
运行
复制
    #ifndef IOHELPER_H_
    #define IOHELPER_H_

    typedef struct fileValues data;

    struct fileValues ioInput(FILE* file,int dim,int sign);

    #endif /* IOHELPER_H_ */

ioHelper.c:

代码语言:javascript
运行
复制
    struct fileValues
    {
int dim;
char sign;
double x;
double y;
    };

map.c:

代码语言:javascript
运行
复制
    void drawData(FILE* vectors)
    {

double paramLoc [MAX_DIMENSION];
char sign;
(this is where i get the error) struct fileValues data;
    ...
    }

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-14 12:15:49

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

您可能只包含了IoHelper.h,它有(不完整的)声明,没有定义。

因此您不能在map.c中声明该结构类型变量,除非您

  • include IoHelper.c (糟糕的想法)
  • 将结构定义放在map.c中的一个指向该结构的指针中,并对其进行malloc。
票数 5
EN

Stack Overflow用户

发布于 2011-08-14 12:18:28

假设map.c没有包含IoHelper.c,它只会看到fileValues,而不会看到struct typedef的声明。因为它没有看到声明,所以它不能确定结构有多大,因此出现了编译错误。

通常你会在一个头文件中声明一个struct --把它从iohelper.c移到iohelper.h,map.c现在就应该被编译了。

票数 1
EN

Stack Overflow用户

发布于 2011-08-14 12:20:54

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

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

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

干杯&哈。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7054961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档