2010-01-17 2 views
1

Я не понимаю, почему эта ошибка возникает. Может быть, кто-то еще это видит.несовместимые типы при инициализации типа

Вот ошибка.

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 

Вот связанный код.

#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 
}; 

Edit: К сожалению, не включают в себя все:

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; 
}; 
+0

обеспечивает определения структур VisParamEntryProxy и VisParamEntryLimitType –

+0

Так что же VisParamEntryProxy? –

+0

Попросите ваш компилятор создать предварительно обработанный вывод. Тогда вы должны иметь более четкое представление о том, что происходит после сумасшедшей замены макросов. – jamesdlin

ответ

2

Там нет определения типа VisParamEntryProxy. Но, предполагая, что здесь была ошибка транскрипции, я думаю, что ошибка вызвана макросами, обеспечивающими только 5 или 6 инициализаторов, когда требуется структура 7.

Или, если я ошибался в цепочке типов, тогда это необходимо всего 6 значений. Что касается последнего, то есть это:

#define VISUAL_PARAM_LIST_ENTRY_FLOAT(name, val, lim) { name, VISUAL_PARAM_ENTRY_TYPE_FLOAT, 0, val, lim } 

Но я думаю, что это должно быть что-то вроде

#define VISUAL_PARAM_LIST_ENTRY_FLOAT(name, val, lim) { name, VISUAL_PARAM_ENTRY_TYPE_FLOAT, 0, val, SOMECOLOR, lim} 
+0

Да, цвет был проблемой. Я переместил его на последнюю позицию, и теперь он работает. Благодаря! – Scott

Смежные вопросы