C 错误:未知类型名称‘;点’;

C 错误:未知类型名称‘;点’;,c,linux,gcc,32bit-64bit,C,Linux,Gcc,32bit 64bit,当我尝试在64位Linux下使用以下命令编译C文件时: gcc -o strain_from_faults_new strain_from_faults_new.c gen.h eqf.h 我遇到了以下错误: eqf.h:16:3: error: unknown type name ‘Point’ Point loc; ^ eqf.h:32:3: error: unknown type name ‘Point’ Point p[33]; ^ eqf.h:44:3:

当我尝试在64位Linux下使用以下命令编译C文件时:

gcc -o strain_from_faults_new strain_from_faults_new.c gen.h eqf.h
我遇到了以下错误:

eqf.h:16:3: error: unknown type name ‘Point’
   Point loc; 
   ^
eqf.h:32:3: error: unknown type name ‘Point’
   Point p[33]; 
   ^
eqf.h:44:3: error: unknown type name ‘Point’
   Point p[33]; 
   ^
eqf.h:61:3: error: unknown type name ‘Point’
   Point xy[NSEG]; 
   ^
似乎没有定义类型“Point”,但在文件中定义了它

gen.h

我不知道为什么会有这样的错误,因为这个C文件可以在其他计算机上编译。这是32位到64位兼容的问题吗? 如有任何意见,将不胜感激

根据注释,我在eqf.h文件中包含了“gen.h”,但效果不好。由于两个头文件
gen.h eqf.h
已包含在C文件
train\u from\u faults\u new.C
中,编译器出现错误:

In file included from eqf.h:12:0,
                 from strain_from_faults_new.c:6:
gen.h:11:8: error: redefinition of ‘struct point’
 struct point {
        ^
In file included from strain_from_faults_new.c:5:0:
gen.h:11:8: note: originally defined here
 struct point {
        ^
有人有什么想法吗

好的,下面是全部代码:

gen.h

分别位于gen.h文件的头部和尾部。但它做得不好,以下是错误:

/tmp/ccteT25z.o: In function `read_clip_faults':
strain_from_faults_new.c:(.text+0x6a4): undefined reference to `enclose'
strain_from_faults_new.c:(.text+0x7c5): undefined reference to `enclose'
strain_from_faults_new.c:(.text+0xa14): undefined reference to `enclose'
strain_from_faults_new.c:(.text+0xa7b): undefined reference to `dsign'
strain_from_faults_new.c:(.text+0xaae): undefined reference to `dsign'
strain_from_faults_new.c:(.text+0xad9): undefined reference to `dsign'
strain_from_faults_new.c:(.text+0xb5a): undefined reference to `dsign'
...
您需要在eqf.h中包含“gen.h”,您需要在eqf.h中包含“gen.h”,您需要添加
eqf.h中包含“gen.h”
并用命令编译您的程序:
gcc-o gen.h eqf.h断层应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变

编译器将根据您的文件输入顺序编译您的程序文件。

您需要添加
#在
eqf.h
中包含“gen.h”
,并使用命令编译您的程序:
gcc-o gen.h eqf.h断层应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变应变

编译器将根据您的文件输入顺序编译您的程序文件。

如果您阅读以下内容:

In file included from eqf.h:12:0,
                 from strain_from_faults_new.c:6:
gen.h:11:8: error: redefinition of ‘struct point’
 struct point {
        ^
In file included from strain_from_faults_new.c:5:0:
gen.h:11:8: note: originally defined here
 struct point {
        ^
它告诉您,
struct point
在同一翻译中定义了两次 装置,
从故障中拉紧,这是一个错误

您已经在第11行的
gen.h
中定义了
struct point

您已将
gen.h
包含在
train\u from\u faults\u new.c中的第5行

您还将
gen.h
包含在
eqf.h
的第12行

最后,您在第6行的
train\u from\u faults\u new.c
中加入了
eqf.h
, 从而再次包括
结构点的定义

为避免此类问题,请在您编写的每个标题中使用, e、 g

gen.h

#ifndef GEN_H
#define GEN_H

    struct point {
      double x;
      double y;
     };
    typedef struct point Point;

#endif
这使得在翻译单元中多次包含标题是无害的

并且,不要在编译器命令行中传递头文件:

gcc -o strain_from_faults_new strain_from_faults_new.c gen.h eqf.h
                                                       ^^^^^ ^^^^^
头文件通过在
.c
文件中包含
-ed来编译,其中
将其复制到翻译单元中。

如果您阅读以下内容:

In file included from eqf.h:12:0,
                 from strain_from_faults_new.c:6:
gen.h:11:8: error: redefinition of ‘struct point’
 struct point {
        ^
In file included from strain_from_faults_new.c:5:0:
gen.h:11:8: note: originally defined here
 struct point {
        ^
它告诉您,
struct point
在同一翻译中定义了两次 装置,
从故障中拉紧,这是一个错误

您已经在第11行的
gen.h
中定义了
struct point

您已将
gen.h
包含在
train\u from\u faults\u new.c中的第5行

您还将
gen.h
包含在
eqf.h
的第12行

最后,您在第6行的
train\u from\u faults\u new.c
中加入了
eqf.h
, 从而再次包括
结构点的定义

为避免此类问题,请在您编写的每个标题中使用, e、 g

gen.h

#ifndef GEN_H
#define GEN_H

    struct point {
      double x;
      double y;
     };
    typedef struct point Point;

#endif
这使得在翻译单元中多次包含标题是无害的

并且,不要在编译器命令行中传递头文件:

gcc -o strain_from_faults_new strain_from_faults_new.c gen.h eqf.h
                                                       ^^^^^ ^^^^^
头文件通过在
.c
文件中包含
-ed来编译,其中


将其复制到翻译单元。

谢谢,但是头文件已经包含在C文件中。如果我将gen.h包含在eqf.h中,编译器会出现“gen.h:11:8:error:redefinition of‘struct point’”错误。gen.h和eqf.h中是否分别定义了struct point??因此,您需要从任何头文件中删除结构点定义。否,结构点仅在gen.h文件中定义。我更新了我的问题,我想问题是C文件中包含了两个头文件。你能发布所有代码吗?提供解决方案会更容易。谢谢,但是头文件已经包含在C文件中。如果我将gen.h包含在eqf.h中,编译器会出现“gen.h:11:8:error:redefinition of‘struct point’”错误。gen.h和eqf.h中是否分别定义了struct point??因此,您需要从任何头文件中删除结构点定义。否,结构点仅在gen.h文件中定义。我更新了我的问题,我想问题是C文件中包含了两个头文件。你能发布所有代码吗?提供解决方案会更容易。此更新确认答案如我在下面所述。您最近的错误是链接错误。看见阅读并应用于您的错误。此更新确认答案与我在下面解释的相同。您最近的错误是链接错误。看见阅读并应用于您的错误。非常感谢您,但是在gen.h中定义的某些函数在C文件中似乎无法识别/tmp/ccteT25z.o:在函数<代码>读取错误:从错误中应变新.c:(.text+0x6a4):未定义对
include'的引用。现在我会更新这个问题欢迎来到StackOverflow。您发布的问题已解决。那样的话,你应该给我一个答案。这个解决方案使你能够发现一个新问题,所以如果你自己不能解决它,就提出一个新问题。您不能一直更改一个问题来获得一系列开放式问题的答案。感谢您的帮助,如果您可以查看在gen.h文件中添加标题保护后出现的错误,那将非常好。Orry Joe,只能重复我的最后一条评论。您没有遵守本网站的规则。感谢您的建议非常感谢,但似乎ge中定义了一些功能
In file included from eqf.h:12:0,
                 from strain_from_faults_new.c:6:
gen.h:11:8: error: redefinition of ‘struct point’
 struct point {
        ^
In file included from strain_from_faults_new.c:5:0:
gen.h:11:8: note: originally defined here
 struct point {
        ^
#ifndef GEN_H
#define GEN_H

    struct point {
      double x;
      double y;
     };
    typedef struct point Point;

#endif
gcc -o strain_from_faults_new strain_from_faults_new.c gen.h eqf.h
                                                       ^^^^^ ^^^^^