Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в Cross Studio 1.5 объявить класс по хитрому
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Pat
Есть вот такой набор наследуемых классов

Код
// Базовый Класс DrvObject
class DrvObject
{
public:
  unsigned char idnDrv;
};

// Класс DrvGrOblect
class DrvGroup;
class DrvGrObject : public DrvObject
{
public:
  DrvGrObject *next;
  DrvGroup    *owner;

  virtual void getEvent(TEvent& event);
};

// Класс DrvGrOblect
class DrvGroup : public DrvGrObject
{
public:
  DrvGrObject *last;
  DrvGrObject *current;
  DrvGroup();

  virtual void getEvent(TEvent& event);
  void insert(DrvGrObject* o);
  unsigned int execute(void);
};

Собственно вся загвоздка вот тут:

Код
// Класс DrvGrOblect
class DrvGrObject : public DrvObject
{
public:
  DrvGrObject *next;
  DrvGroup    *owner;

  virtual void getEvent(TEvent& event);
};

Вот этой конструкции DrvGroup *owner; компилятор не видит
IAR начинал работать нормально если вначале заголовочного файла приписать
class DrvGroup;

Cross Stulio этого не понимает.
Может есть какое волшебное слово применительно к GCC.
Alex03
В CW 1.5 build 2 Ваш код компилится даже без варнингов.
Правда с такими изменениями:
virtual void getEvent(/*TEvent& event*/);

Так что видимо надо искать пораньше, какойнить ";" в хидере не хватает и т.д.
Pat
Цитата(Alex03 @ Sep 7 2006, 20:12) *
В CW 1.5 build 2 Ваш код компилится даже без варнингов.
Правда с такими изменениями:
virtual void getEvent(/*TEvent& event*/);

Так что видимо надо искать пораньше, какойнить ";" в хидере не хватает и т.д.

TEvent& event
Эту структуру я просто не вставил из за экономии места, (забыл закоментировать).
А так не хочет компилится пишет если:
вставлено class DrvObject;
parse error before "DrvGroup"
если его нет тогда
ISO C++ forbids declaration of `DrvGroup' with no type
В ИАРе еще раз повторюсь все компилится без проблем.
OlegS
Цитата(Alex03 @ Sep 7 2006, 20:12) *
В CW 1.5 build 2 Ваш код компилится даже без варнингов.
Правда с такими изменениями:
virtual void getEvent(/*TEvent& event*/);

Ради интереса проверил - компилится на ура.
правда вместо:

class DrvGroup;
class DrvGrObject : public DrvObject
{
public:
DrvGrObject *next;
DrvGroup *owner;

virtual void getEvent(TEvent& event);
};


можно написать:

class DrvGrObject : public DrvObject
{
public:
DrvGrObject *next;
class DrvGroup *owner;

virtual void getEvent(TEvent& event);
};


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