реклама на сайте
подробности

 
 
> Ошибка "[Error Pe070] incomplet type is not allowed", Не могу сообразить почему IAR ругается.
mempfis_
сообщение Mar 24 2014, 08:29
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Всем добрый день.
Пытаюсь добавить поддержку 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
seneka
сообщение Mar 24 2014, 09:28
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 11-03-14
Из: Ростов
Пользователь №: 80 888



Наверное Вам нужно объявить в include файле тип структуры операторм typedef
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 24 2014, 09:53
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(seneka @ Mar 24 2014, 13:28) *
Наверное Вам нужно объявить в 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, то новых ошибок не появляется.

Я пока что затрудняюсь найти ответ на решение моей проблемы.
Go to the top of the page
 
+Quote Post
seneka
сообщение Mar 24 2014, 10:04
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 11-03-14
Из: Ростов
Пользователь №: 80 888



Вы только что описали причину проблемы "видимость". Посмотрел бегло заголовок uip.h там очень много #if или #ifdef
Скорее всего кто то из них делает Вашу структуру невидимой. Попробуйте поместить структуру в самый верх uip.h
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 24 2014, 10:23
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(seneka @ Mar 24 2014, 14:04) *
Вы только что описали причину проблемы "видимость". Посмотрел бегло заголовок uip.h там очень много #if или #ifdef
Скорее всего кто то из них делает Вашу структуру невидимой. Попробуйте поместить структуру в самый верх uip.h


Ошибка всёравно остаётся даже если перенести описание структуры в самое начало файла uip.h.
Но она однозначно связана с видимостью определения. Если изменить название структуры uip_eth_addr, то ошибка остаётся всё той же.
В файле uip_arp.h не подключается файл uip.h. Попробую покопаться в проекте и разобраться почему так происходит.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 25 2014, 03:00
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Сделайте вывод препроцессора в листинг и посмотрите, что туда включается (какие определения/объявления).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016