【问题标题】:invalid application of 'sizeof' to an incomplete type struct'sizeof' 对不完整类型结构的无效应用
【发布时间】:2015-10-13 04:43:37
【问题描述】:

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

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

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 文件中,但这似乎也无济于事。

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

【问题讨论】:

  • 不,它从来没有工作过
  • 感谢@DavidHeffernan 富有洞察力的评论,这确实帮助我解决了我的问题。
  • 好吧,它从来没有用过吗?换句话说,问题包含错误信息。
  • 实际上它工作得很好,最初它是 typedef struct { }vector3_scalar;我删除了 typedef 并且没有以正确的方式定义结构,所以我遇到了问题。所以是的,事实上它确实有效。
  • 不,它没有。不同的代码可能有效。这里的代码从来没有。

标签: c struct incomplete-type


【解决方案1】:
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)。

【讨论】:

  • 谢谢你,我一开始就在做 typedef struct .... 并且它正在工作。我只是忘了正确设置我的结构。我将 typedef 移到了标题中,这样我就可以对它们有不同的实现,neon、simd、标量,所以如果你使用代码,api 不会改变,但我可以随着时间的推移添加改进。
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多