C 在头文件中使用结构;“未知类型”;错误
我正在Kubuntu使用Kdevelop。 我在datasetup.h文件中声明了一个结构: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
#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);