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

use*_*950 -1 c struct incomplete-type

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

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

在此输入图像描述

common_struct.h看起来像这样

struct {
    float m[16];
} mat4_scalar;

struct {
    float p[3];
} vector3_scalar;
Run Code Online (Sandbox Code Playgroud)

然后在我的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);
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

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

我也尝试将common_structs.h直接包含在.c文件中,但这似乎也没有帮助.

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

n. *_* m. 7

struct {
    float p[3];
} vector3_scalar;
Run Code Online (Sandbox Code Playgroud)

这声明了一个名为vector3_scalar"unnamed struct" 的变量.你要

struct vector3_scalar {
    float p[3];
};
Run Code Online (Sandbox Code Playgroud)

更好

typedef struct {
    float p[3];
} vector3_scalar;
Run Code Online (Sandbox Code Playgroud)

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