这让我有点困惑,因为它在过去有效。
我有一个 vector 3结构和一个矩阵4结构,其定义如下
common_struct.h 看起来像这样
struct {
float m[16];
} mat4_scalar;
struct {
float p[3];
} vector3_scalar;
然后在我的 vector3_scalar.h 中我有这样的函数:
#include "../../common/common_structs.h"
struct vector3_scalar* vec3_zero(void);
struct vector3_scalar* vec3_up(void);
struct vector3_scalar* vec3_right(void);
struct vector3_scalar* vec3_forward(void);
在我的vector3_scalar.c中,我试图像这样分配一个vector3_scalar:
#include "../headers/vector3_scalar.h"
struct vector3_scalar* v = (struct vector3_scalar*)malloc(sizeof(struct vector3_scalar)); //<--- error occurs here
但我对不完整类型 struct vector3_scalar 的“sizeof”应用无效
我也尝试过将 common_structs.h 直接包含在 .c 文件中,但这似乎也没有帮助。
在这种情况下我做错了什么?
最佳答案
struct {
float p[3];
} vector3_scalar;
这声明了一个名为vector3_scalar
、类型为“未命名结构”的变量。你想要
struct vector3_scalar {
float p[3];
};
更好
typedef struct {
float p[3];
} vector3_scalar;
然后在任何地方只使用vector3_scalar
(而不是struct vector3_scalar
)。
关于c - 'sizeof' 对不完整类型结构的无效应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094286/