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

C 在头文件中使用结构;“未知类型”;错误,c,struct,header-files,kdevelop,C,Struct,Header Files,Kdevelop,我正在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

我正在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;
行中)


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

如果您必须定义新类型,您必须编写:

typedef struct {

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

然后可以使用georeg_val作为新类型。

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

struct STRUCT_NAME {} ;

如果使用第一种方法(给结构一个名称),则必须通过将变量显式标记为结构来定义该变量:

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

STRUCT_ALIAS myStruct;
奖励积分: 可以使用结构的名称和别名声明结构:

typedef struct STRUCT_TAG {} STRUCT_TAG;
// here STRUCT_NAME == STRUCT_ALIAS
然后在变量定义中,您可以使用第一个或第二个方法。为什么两个世界都是好的?Struct alias允许您缩短结构变量定义-这有时是一件好事。但是struct name允许您进行
转发声明
。在某些情况下,这是不可缺少的工具——考虑在结构之间有循环引用:

struct A {
  struct B * b;
}
struct B {
  struct A * a;
}
除此之外,此体系结构可能存在缺陷-当以第一种方式声明结构(使用名称)并且通过将结构指针标记为定义结构类型(在本例中为二进制搜索树结构)来显式引用结构指针时,此循环定义将编译:

声明一个函数,例如:

treeNode *insertElement(treeNode *treeA, int number);

或切换到
struct georeg_val gval <代码>主< /代码> @ DealthJAKE也<代码>包含./Cord>主文件中的头文件(如果您还没有这样做),你将C和C++混合在这里吗?确保导入标题:<代码>导入“DATABETUP .H”< />代码>。
struct tree { 
  int info;
  struct tree *left;
  struct tree *right;
} 

typedef struct tree treeNode;
treeNode *insertElement(treeNode *treeA, int number);