2013-07-01 4 views
-1

Я столкнулся проблемы с указателями и структурами в С. Допустим:Несовместимые типы при инициализации ошибки типа

typedef struct mdata{ 
    int a; 
    int b; 
    ... 
} pred_data_attr; 

typedef struct mConfig{ 
    pred_data_attr mdata; 
    ... 
} mConfig; 

struct control{ 
    struct mConfig mcfg; 
    ... 
}; 

INT32 rdfapp(struct control *rdf){ 
    pred_data_attr* mdata = rdf->mcfg.mdata; 
    ... 
} 

Я получил эту ошибку:

incompatible types when initializing type 'struct pred_data_attr *' using type 'pred_data_attr'

Как я могу исправить эту проблему?

+2

Пожалуйста, разместите код, который выполняет инициализацию. Но, судя по сообщению об ошибке, вы пытаетесь инициализировать тип указателя со структурой, что просто неправильно. Тип указателя возьмет что-то, возвращаемое из 'malloc',' calloc', 'realloc',' mmap', '&' operator или аналогичного. Не структура. –

+0

Ваше соглашение об именах является странным (m префиксно к именам переменных-членов обычно, а не именам типов). Что такое определение 'mConfig'? Имеет ли он элемент 'mdata', который имеет тип' pred_data_attr * '? –

+0

Предоставить детали структуры 'mConfig' – VoidPointer

ответ

3

Насчёт:

INT32 rdfapp(struct control *rdf) 
{ 
    pred_data_attr * mdata = &rdf->mcfg.mdata; 

В namings в коде еще один хороший пример того, как неприемлемое именование может привести к раздражению и ошибок.

Это не очень хорошая идея назвать разные вещи то же самое:

pred_data_attr * mdata /* here mdata is a pointer */ 

pred_data_attr mdata; /* here mdata is the instance of a structure */ 

Есть много possiblilites как называния может быть установка, из которых я не хочу, чтобы рекомендовать какой-либо здесь, как это в первую очередь о:

Дайте разные имена различным вещам.

+0

congrats for 10k :) –

+0

@GrijeshChauhan: Thx ... :-) – alk

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