将'sizeof'无效应用于不完整类型结构

时间:2015-10-13 04:43:38

标签: c struct incomplete-type

这对我来说有点令人费解,因为它过去有效。

我有一个vector3结构和一个matrix4结构,它们是这样定义的

enter image description here

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中我试图像这样malloc一个vector3_scalar:

#include "../headers/vector3_scalar.h"

struct vector3_scalar* v = (struct vector3_scalar*)malloc(sizeof(struct  vector3_scalar)); //<--- error occurs here

但我将'sizeof'无效应用于不完整类型struct vector3_scalar

我也尝试将common_structs.h直接包含在.c文件中,但这似乎也无济于事。

在这种情况下我做错了什么?

1 个答案:

答案 0 :(得分:7)

struct {
    float p[3];
} vector3_scalar;

这声明了一个名为vector3_scalar的变量,类型为&#34;未命名的struct&#34;。你想要

struct vector3_scalar {
    float p[3];
};

更好的

typedef struct {
    float p[3];
} vector3_scalar;

然后在任何地方使用vector3_scalar(不是struct vector3_scalar)。