“从不兼容的指针类型分配”警告

时间:2012-01-06 09:18:42

标签: c pointers struct warnings

我正在编写一个用纹理和动画数据解析文件的函数,并将其加载到我声明的一些全局结构中。我在特定行上收到编译器警告“从不兼容的指针类型分配”。这是很多代码,所以我只想在这里发布重要的部分。

首先,我的动画例程有一个struct数据类型,如下所示:

    typedef struct {
        unsigned int frames;
        GLuint *tex;
        float *time;
        struct animation *next;
    } animation;

正如您所看到的,struct中的最后一个变量是指向动画完成时默认为另一个动画的指针。

以下是加载函数的声明:

    void LoadTexturePalette(GLuint **texture, animation **anim, const char *filename)

该函数将信息加载到动画数组中,因此是双指针。

在加载每个动画的最后,从文件中提取一个整数,指示“下一个”指针指向哪个动画(加载的动画)。

    fread(tmp, 1, 4, file);
    (*anim)[i].next = &((*anim)[*tmp]);

在最后一行,我收到编译器警告。我还没有使用那个变量,所以我不知道警告是否是一个问题,但我觉得我的语法或我的方法可能在设置该变量时不正确。

1 个答案:

答案 0 :(得分:9)

   typedef struct { /* no tag in definition */
       unsigned int frames;
       GLuint *tex;
       float *time;
       struct animation *next; /* pointer to an undefined structure */
   } animation;

如果没有标记(typedef struct animation { /* ... */ } animation;),结构定义中对“struct animation”的任何引用都是对尚未定义的结构的引用。由于您只使用指向该未定义结构的指针,编译器并不介意。

所以,添加标签 ---甚至可以摆脱typedef:它只会增加混乱:)

    typedef struct animation { /* tag used in definition */
        unsigned int frames;
        GLuint *tex;
        float *time;
        struct animation *next; /* pointer to another of this structure */
    } animation;