在头文件中使用结构“未知类型”错误

2024-04-25

我在 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:错误:未知类型名称“georeg_val”

(这是在georeg_val gval; line)

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


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

struct STRUCT_NAME {} ;

or

typedef struct {} STRUCT_ALIAS;

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

struct STRUCT_NAME myStruct;

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

STRUCT_ALIAS myStruct;

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在头文件中使用结构“未知类型”错误 的相关文章

随机推荐