【问题标题】:Why does my C project compilation cannot find my structure?为什么我的 C 项目编译找不到我的结构?
【发布时间】:2014-09-29 13:17:45
【问题描述】:

我有一个基于单个 C 文件的项目,我尝试重新安排它以在多个 .c 和 .h 文件中进行进一步开发。

我的主要组织如下:

// General includes

typedef struct 
{
} MyStruct;

#include "MyInclude.h"

// Rest of the code

我的文件“MyInclude.c”组织如下:

#include "MyInclude.h"

// Defines

// Functions that need to know MyStruct

关于 GCC 的编译过程,我有些不明白。事实上,我得到了错误“MyStruct undeclared (first use in this function)”,我不知道为什么我把我的包含放在我的结构的 typedef 声明之后。

有人知道为什么会这样吗?

【问题讨论】:

  • 结构体不应该在头文件里吗?
  • MyInclude 中有什么? MyStruct真的是空的吗?
  • 让我改写我之前的评论:为什么不是头文件中定义的结构?如果你有多个依赖于结构的源文件,它们不会知道它,只有定义它的源文件才会知道结构。
  • 我需要知道我所有的 .c 文件(在 main.c 和 MyInclude.c 中)中的 MyStruct 我认为在我的 main.c 中定义它是一样的。我将需要实现其他需要它的 MyInclude.c 文件。

标签: c struct compilation


【解决方案1】:

这个问题有点不清楚。

文件“MyInclude.c”只能访问您的 H 文件。 虽然您的结构是用另一个 C 文件编写的。

您可以通过以下方式解决:

  1. 在 H 文件“MyInclude.h”上定义结构。它会起作用,但在方法上它是错误的。
  2. 定义 setter 和 getter 以访问您的结构

干杯

【讨论】:

  • typedef 放在头文件中并没有什么“方法上的错误”,这就是通常的做法。此外,getter 和 setter 与这个问题无关,因为它似乎是关于类型声明的问题,而不是关于变量声明。
【解决方案2】:

你的文件.h:

// file.h
#include <stdio.h> //Juste for printf

typedef struct s_data
{
char c;
} t_data;

你的文件.c:

#include "file.h"

int main()
{
t_data data;

data.c = 'a';
printf("%c", data.c);
return (0);
}

编译(如果您的文件 .c 和 .h 在同一目录中):

gcc file.c -o my_app -I .

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多