【发布时间】:2025-12-21 22:55:10
【问题描述】:
我正在 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;
但我的编译器返回:
错误:“struct _p_TSResilOnline”类型的定义不完整
*check = (o->threshold
我想知道什么是不完整的。编译器应该知道一切。
【问题讨论】:
-
因为您使用的是
typedef中的结构实例,而不是结构的类型。试试struct _p_TSResilOnline { ...}; -
struct { ... } _p_TSResilOnline定义了一个未命名(未标记)结构类型的变量。在结构定义中添加标签。 -
不要
typedef指针!这最终会导致混乱和缺陷。 -
对。所以它适用于:
struct _p_TSResilOnline{ ... } ; typedef struct _p_TSResilOnline *TSResilOnline; -
注意:即使您修复了错误,代码仍可能违反严格别名规则,导致未定义行为
标签: c pointers struct declaration