首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化类型时类型不兼容

初始化类型时类型不兼容
EN

Stack Overflow用户
提问于 2010-01-17 12:31:41
回答 1查看 3.3K关注 0票数 1

我不明白为什么会出现这个错误。也许其他人也看到了。

错误是这样的。

代码语言:javascript
复制
actor_plazma.c:92: error: incompatible types when initializing type ‘int (*)(struct VisObject *)’ using type ‘float’
actor_plazma.c:92: error: incompatible types when initializing type ‘void *’ using type ‘float’
make: *** [actor_plazma.lo] Error 1

下面是相关的代码。

代码语言:javascript
复制
#define VISUAL_PARAM_LIST_ENTRY_FLOAT(name, val, lim)       { name, VISUAL_PARAM_ENTRY_TYPE_FLOAT, 0, val, lim }


#define VISUAL_PARAM_LIMIT_FLOAT(min, max)          { VISUAL_PARAM_ENTRY_LIMIT_TYPE_FLOAT, 0, min, 0, 0, max, 0 }

typedef enum {
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_NULL,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_INTEGER,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_FLOAT,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_DOUBLE,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_END
} VisParamEntryLimitType;

static VisParamEntryProxy params[] = {
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("bass sensitivity",    0,  VISUAL_PARAM_LIMIT_NONE),
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("plazma effect",   TRUE,   VISUAL_PARAM_LIMIT_BOOLEAN),
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("3d effect option",    FALSE,  VISUAL_PARAM_LIMIT_BOOLEAN),
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("lines",       TRUE,   VISUAL_PARAM_LIMIT_BOOLEAN),
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("spectrum",        TRUE,   VISUAL_PARAM_LIMIT_BOOLEAN),
    VISUAL_PARAM_LIST_ENTRY_INTEGER ("3d effect",       TRUE,   VISUAL_PARAM_LIMIT_BOOLEAN),
    VISUAL_PARAM_LIST_ENTRY_FLOAT   ("rotation speed",  0.4,    VISUAL_PARAM_LIMIT_FLOAT(0.0f, 1000.0f)), // line 92
    VISUAL_PARAM_LIST_END
};

编辑:哦,没有包含所有内容:

代码语言:javascript
复制
typedef enum {
    VISUAL_PARAM_ENTRY_TYPE_NULL,       /**< No parameter. */
    VISUAL_PARAM_ENTRY_TYPE_STRING,     /**< String parameter. */
    VISUAL_PARAM_ENTRY_TYPE_INTEGER,    /**< Integer parameter. */
    VISUAL_PARAM_ENTRY_TYPE_FLOAT,      /**< Floating point parameter. */
    VISUAL_PARAM_ENTRY_TYPE_DOUBLE,     /**< Double floating point parameter. */
    VISUAL_PARAM_ENTRY_TYPE_COLOR,      /**< VisColor parameter. */
    VISUAL_PARAM_ENTRY_TYPE_PALETTE,    /**< VisPalette parameter. */
    VISUAL_PARAM_ENTRY_TYPE_OBJECT,     /**< VisObject parameter. */
    VISUAL_PARAM_ENTRY_TYPE_END     /**< List end, and used as terminator for VisParamEntry lists. */
} VisParamEntryType;

typedef enum {
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_NULL,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_INTEGER,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_FLOAT,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_DOUBLE,
    VISUAL_PARAM_ENTRY_LIMIT_TYPE_END
} VisParamEntryLimitType;

struct _VisParamEntryLimitProxy {
    VisParamEntryLimitType  type;

    struct {
        int      integer;       /**< Integer data. */
        float        floating;      /**< Floating point data. */
        double       doubleflt;     /**< Double floating point data. */
    } min;

    struct {
        int      integer;       /**< Integer data. */
        float        floating;      /**< Floating point data. */
        double       doubleflt;     /**< Double floating point data. */
    } max;
};

struct _VisParamEntryProxy {
    const char      *name;

    VisParamEntryType    type;

    char            *string;
    double           value;

    VisColor         color;

    VisParamEntryLimitProxy  limit;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-17 13:14:26

类型VisParamEntryProxy没有定义。但是,假设这是一个转录错误,我认为错误是由于宏只提供了5到6个初始化器,而结构需要7个。

或者,如果我弄错了类型链,那么它只需要6个值。对于后者,您将拥有以下内容:

代码语言:javascript
复制
#define VISUAL_PARAM_LIST_ENTRY_FLOAT(name, val, lim) { name, VISUAL_PARAM_ENTRY_TYPE_FLOAT, 0, val, lim }

但我认为它应该是这样的

代码语言:javascript
复制
#define VISUAL_PARAM_LIST_ENTRY_FLOAT(name, val, lim) { name, VISUAL_PARAM_ENTRY_TYPE_FLOAT, 0, val, SOMECOLOR, lim}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2079949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档