【问题标题】:Defining a struct within a separate executable evidence file在单独的可执行证据文件中定义结构
【发布时间】:2015-02-03 10:08:36
【问题描述】:

我一直在尝试为我的所有测试编译我的单独可执行文件,并收到此错误: “变量具有不完整的类型‘结构观察’、‘结构偏好’、‘结构气候’”?

#include <stdio.h>
#include "file4.h"
#include <stdlib.h>
#include <math.h>
#include <string.h>

void eanalyze_weather()
{
  struct observations day1;
  day1.temp = 70.0;
  day1.humid = 30.0;
  day1.wind = 5.0;

  struct observations day2;
  day2.temp = 74.0;
  day2.humid = 24.0;
  day2.wind = 0.0;

  struct observations day3;
  day3.temp = 84.0;
  day3.humid = 18.0;
  day3.wind = 10.0;

int main(void)
{

  econcat();
  euint_to_binary();
  ebinary_to_uint();
  eanalyze_weather();
  return 0;
}

当我尝试在单个文件中运行“main”中的所有内容时,它可以正确编译并且代码可以正常工作,但是当我尝试这样做时,它没有编译。有谁知道这是为什么?

谢谢。

【问题讨论】:

  • struct observations 定义在哪里?
  • 我在其他文件中定义了
  • 还有什么文件?在file4.h?显示您的编译语句,显示您的文件,更重要的是,复制确切的错误消息。
  • 当我尝试将它全部编译到一个文件中时,它运行良好,但我正在测试除了我的所有定义之外的第二个文件运行它,只是为了巩固我对概念的理解。 ..
  • 不,在我的 file4.c 中。这是我的 file4_evidence.c

标签: c struct typedef main void


【解决方案1】:

此错误是因为 struct observations 的定义在包含 main() 的文件中不可见,因为该定义存在于其他文件 [单独的翻译单元] 中。

一种解决方法(也是通常的最佳实践)是将结构的定义放在头文件中,并且不要忘记包含一些include guard

【讨论】:

  • 谢谢,我已经弄明白了!
  • 另外,当我现在尝试运行此程序时,是否有出现段错误的原因?我必须为 list[] 分配内存吗?
  • @LeehoLim 如何在没有看到您的完整代码的情况下告诉我的朋友?顺便说一句,这应该是一个全新的问题,IMO。
  • 嗯,我知道问题不在于我定义我的函数的文件(因为我已经测试了所有内容......)所以我假设错误是我发布的这个 file4_evidence.c 文件
  • @LeehoLim 显然在这段代码中一切都很好。你必须在其他文件中遇到一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2016-03-03
相关资源
最近更新 更多