c - 'sizeof' 对不完整类型结构的无效应用

标签 c struct incomplete-type

这让我有点困惑,因为它在过去有效。

我有一个 vector 3结构和一个矩阵4结构,其定义如下

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中,我试图像这样分配一个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/

相关文章:

c - c 中的动态结构数组(malloc、realloc)

c++ - 求解 D 给定 A、B、C 和 C-D 的长度,平行于 A-B

c - C中结构中的指针指向的自由数组

C: 为什么我会收到编译错误“"dereferencing pointer to incomplete type ‘struct xy’”?

c - 函数指针和 GCC 警告

c - 对 2D 阵列的一部分进行无限循环

c++ - 初始化枚举到结构的映射

c - 如何正确地为函数中的结构分配内存以返回其值供以后使用以及如何将结构转换为指针?

ios - 如何修复 UICollectionViewCell 子类的不兼容指针

c - 在 C 语言中,是否可以在语义上创建类型不完整的左值?