为什么我的结构定义不完整?
Why my struct has an incomplete definition?
我正在 C:
中实现 struct
typedef struct {
...
} _p_TSResilOnline;
typedef struct _p_TSResilOnline *TSResilOnline;
之后(在同一个文件中),我正在使用:
TSResilOnline o = (TSResilOnline)(chk->data);
...
*check = (o->threshold < PetscAbs(sf)) ? PETSC_FALSE : PETSC_TRUE;
但是我的编译器returns:
error: incomplete definition of type 'struct _p_TSResilOnline'
*check = (o->threshold < PetscAbs(sf)) ? PETSC_FALSE : PETSC_TRUE;
~^
note: forward declaration of 'struct _p_TSResilOnline' typedef struct
_p_TSResilOnline *TSResilOnline;
我想知道什么是不完整的。编译器应该无所不知。
在此声明中
struct {
...
} _p_TSResilOnline;
您定义了一个具有未命名结构类型的标识符 _p_TSResilOnline
的对象。
在此声明中
typedef struct _p_TSResilOnline *TSResilOnline;
您声明了结构类型 struct _p_TSResilOnline
。
对象的标识符_p_TSResilOnline
和typedef声明中用于命名结构的标识符_p_TSResilOnline
在不同的命名空间中,标识不同的实体。
struct _p_TSResilOnline
的定义不完整,因为结构的成员未知。
但是在这个表达式中
o->threshold
您正在尝试访问名称为 threshold
且未声明的成员。
所以编译器报错。
编辑:按照以下方式更改问题中的第一个声明后
typedef struct {
...
} _p_TSResilOnline;
然而 _p_TSResilOnline
和 struct _p_TSResilOnline
是不同的实体,它们的标识符属于不同的名称空间。
你应该改写
struct _p_TSResilOnline {
...
};
或
typedef struct _p_TSResilOnline {
...
} _p_TSResilOnline;
我正在 C:
中实现struct
typedef struct {
...
} _p_TSResilOnline;
typedef struct _p_TSResilOnline *TSResilOnline;
之后(在同一个文件中),我正在使用:
TSResilOnline o = (TSResilOnline)(chk->data);
...
*check = (o->threshold < PetscAbs(sf)) ? PETSC_FALSE : PETSC_TRUE;
但是我的编译器returns:
error: incomplete definition of type 'struct _p_TSResilOnline'
*check = (o->threshold < PetscAbs(sf)) ? PETSC_FALSE : PETSC_TRUE; ~^ note: forward declaration of 'struct _p_TSResilOnline' typedef struct _p_TSResilOnline *TSResilOnline;
我想知道什么是不完整的。编译器应该无所不知。
在此声明中
struct {
...
} _p_TSResilOnline;
您定义了一个具有未命名结构类型的标识符 _p_TSResilOnline
的对象。
在此声明中
typedef struct _p_TSResilOnline *TSResilOnline;
您声明了结构类型 struct _p_TSResilOnline
。
对象的标识符_p_TSResilOnline
和typedef声明中用于命名结构的标识符_p_TSResilOnline
在不同的命名空间中,标识不同的实体。
struct _p_TSResilOnline
的定义不完整,因为结构的成员未知。
但是在这个表达式中
o->threshold
您正在尝试访问名称为 threshold
且未声明的成员。
所以编译器报错。
编辑:按照以下方式更改问题中的第一个声明后
typedef struct {
...
} _p_TSResilOnline;
然而 _p_TSResilOnline
和 struct _p_TSResilOnline
是不同的实体,它们的标识符属于不同的名称空间。
你应该改写
struct _p_TSResilOnline {
...
};
或
typedef struct _p_TSResilOnline {
...
} _p_TSResilOnline;