Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: warning; как избавиться
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Troll
Приветствую.

Описание проблемы:
в хедере есть описание структуры
Код
typedef struct _t_haffman_tree_encode_ {
    uint32 count;
    struct _t_haffman_tree_encode *left;
    struct _t_haffman_tree_encode *right;
    bool flag;
} tHaffmanTreeEncode, *pHaffmanTreeEncode;


кусок кода:
Код
pHaffmanTreeEncode pEncode, pRoot;
uint32 min1, min2;
...
pEncode = malloc( // Выделить память
...
pEncode[j].left = &pEncode[min1];
pEncode[j].right = &pEncode[min2];


Вопрос:
При компиляции на строки
pEncode[j].left = &pEncode[min1];
pEncode[j].right = &pEncode[min2];
выдается варнинг: "assignment from incompatible pointer type". Пробовал явное преобразование типа - не помогает ((pHaffmanTreeEncode)&pEncode[]).

Подскажите пожалуйста, как избавиться от варнинга и если не сложно объясните, почему компилятор ругается.

Спасибо.
Палыч
Может, потому, что left, right указатели на struct _t_haffman_tree_encode (без подчерка), а приводите к типу указатель на struct _t_haffman_tree_encode_ (с подчеркам).
demiurg_spb
Вот такой (чисто абстрактный) пример у меня компилится молча.
Код
    typedef struct x_tag
    {
        struct x_tag *left;
        struct x_tag *right;
    } x_t, *px_t;

    px_t px = NULL; // У Вас тут malloc

    px[0].left  = &px[-1];
    px[0].right = &px[1];
=GM=
Цитата(Troll @ Apr 8 2010, 06:03) *
выдается варнинг: "assignment from incompatible pointer type"

Непонятно, откуда взялся массив структуры pEncode[j].left и pEncode[j].right. Непонятно также, что здесь присваивается pEncode[j].left = &pEncode[min1]; С одной стороны адрес, а с другой?
rezident
На архитектурах, отличающихся от 8-ми битных, структуры выравнивать трэба.
Troll
Цитата(Палыч @ Apr 8 2010, 11:40) *
Может, потому, что left, right указатели на struct _t_haffman_tree_encode (без подчерка), а приводите к типу указатель на struct _t_haffman_tree_encode_ (с подчеркам).

Точно, так и есть.
'Палыч' - большое спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.