Перейти к содержанию
    

Ошибка "[Error Pe070] incomplet type is not allowed"

Всем добрый день.

Пытаюсь добавить поддержку DHCP в проект Simple Webserver из IAR.

Скопировал файлы dhcpc.h и dhcp.c и файл dhcp.c добавил к проекту.

При компиляции IAR ругается на строки, где используется структура struct uip_eth_addr которая определена в файле uip.h как

/**
* Representation of a 48-bit Ethernet address.
*/
struct  uip_eth_addr{
  u8_t addr[6];
};

 

Например кусок кода

#ifndef __UIP_ARP_H__
#define __UIP_ARP_H__

#include "uip.h"

#if UIP_FIXEDETHADDR
extern const struct uip_eth_addr uip_ethaddr;
#else
extern struct uip_eth_addr uip_ethaddr;
#endif


/**
* The Ethernet header.
*/
struct uip_eth_hdr {
  struct uip_eth_addr dest; //Error[Pe070] incomplet type is not allowed
  struct uip_eth_addr src; //Error[Pe070] incomplet type is not allowed
  u16_t type;
};
#endif //__UIP_ARP_H__

 

 

В этом куске кода файл uip.h подключён директивой #include.

Т.е. теоретически код ниже должен свободно понимать что такое struct uip_eth_addr.

Практически выдаётся ошибка Pe070.

В чём я не прав? Или что я упускаю из виду?

 

Прилагаю также проект в IAR ARM 5.40

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное Вам нужно объявить в include файле тип структуры операторм typedef

 

Это не помогает - я уже пробовал.

Если непосредственно перед struct uip_eth_hdr объявить структуру struct uip_eth_addr, ошибка пропадает.

 

 

/**
* Representation of a 48-bit Ethernet address.
*/
struct  uip_eth_addr{
  u8_t addr[6];
};

/**
* The Ethernet header.
*/
struct uip_eth_hdr {
  struct uip_eth_addr dest;
  struct uip_eth_addr src;
  u16_t type;
};

 

Если же оставить описание структуры struct uip_eth_addr в другом h-файле и использовать подключение этого файла с текущему h-файлу, тогда появляется.

 

Если структура struct uip_eth_addr описана в файле uip.h, которые подключается в файле uip_arp_.h, в котором она используется для описания структуры uip_eth_hdr, то у меня есть предположение, что если гдето в другом месте проекта uip.h уже был подключён, то в файле uip_arp.h подключение не сработает из-за директив #ifndef __UIP_H__ #define __UIP_H__ #endif //__UIP_H__, поэтому IAR и ругается.

 

Правда я проверил все подключения uip.h в проекте, но нигде криминала не нашёл. В основном они подключаются в c-файлах, добавленных к проекту, а также в h-файлах uip_arp.h, httpd-fsdata.h, uip_arch.h. Причём если закоментировать подключение uip.h в uip_arch.h, то новых ошибок не появляется.

 

Я пока что затрудняюсь найти ответ на решение моей проблемы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы только что описали причину проблемы "видимость". Посмотрел бегло заголовок uip.h там очень много #if или #ifdef

Скорее всего кто то из них делает Вашу структуру невидимой. Попробуйте поместить структуру в самый верх uip.h

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы только что описали причину проблемы "видимость". Посмотрел бегло заголовок uip.h там очень много #if или #ifdef

Скорее всего кто то из них делает Вашу структуру невидимой. Попробуйте поместить структуру в самый верх uip.h

 

Ошибка всёравно остаётся даже если перенести описание структуры в самое начало файла uip.h.

Но она однозначно связана с видимостью определения. Если изменить название структуры uip_eth_addr, то ошибка остаётся всё той же.

В файле uip_arp.h не подключается файл uip.h. Попробую покопаться в проекте и разобраться почему так происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте вывод препроцессора в листинг и посмотрите, что туда включается (какие определения/объявления).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...