gpt4 book ai didi

c - 在头文件中使用结构 "unknown type"错误

转载 作者:太空狗 更新时间:2023-10-29 16:33:10 25 4
gpt4 key购买 nike

我在 Kubuntu 中使用 Kdevelop。我在我的 datasetup.h 文件中声明了一个结构:

#ifndef A_H
#define A_H

struct georeg_val {

int p;
double h;
double hfov;
double vfov;
};

#endif

现在当我在我的 main.c 文件中使用它时

int main()
{
georeg_val gval;

read_data(gval); //this is in a .cpp file

}

我收到以下错误:

georeg_chain.c:7:3: error: unknown type name 'georeg_val'

(这是在 georeg_val gval; 行)

如果有人能帮我解决这个错误,我将不胜感激。

最佳答案

在 C 中有两种声明结构的可能性:

struct STRUCT_NAME {} ;

typedef struct {} STRUCT_ALIAS;

如果您使用第一种方法(给结构命名)- 您必须通过将其显式标记为结构来定义变量:

struct STRUCT_NAME myStruct;

但是,如果您使用第二种方法(给结构一个别名),那么您可以省略 struct 标识符 - 编译器可以推断出变量的类型,只给出它的 alias :

STRUCT_ALIAS myStruct;

奖励积分:您可以使用名称和别名来声明结构:

typedef struct STRUCT_TAG {} STRUCT_TAG;
// here STRUCT_NAME == STRUCT_ALIAS

然后在变量定义中,您可以使用第一种或第二种方法。为什么两个世界都好?结构别名可让您缩短结构变量定义 - 有时这是一件好事。但是 struct name 可以让你做 forward declarations。在某些情况下这是不可或缺的工具 - 考虑到您在结构之间有循环引用:

struct A {
struct B * b;
}
struct B {
struct A * a;
}

除此之外,此架构可能存在缺陷 - 当以第一种方式(使用名称)声明结构并且通过将结构指针标记为 struct 来显式引用结构指针时,此循环定义将编译。

关于c - 在头文件中使用结构 "unknown type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com