Есть функция getErrorPacket(), она является частью класса Etaz_item, который в конструкторе принимает ссылку на класс типа NetTransferConstrol, который уже в свою очередь содержит функцию get_error_packet(), которая ""генерирует" исходные данные.
Упрощенно класс Etaz_item выглядит следующим образом
Код
class NetTransferConstrol;
class Etaz_item: public TechObj
{
private:
NetTransferConstrol & cBfppClass;
public:
void func1();
void func2();
uint8_t getErrorPacket()
{
return cBfppClass.get_error_packet();
};
Etaz_item ( NetTransferConstrol & _cBfppClass )
: cBfppClass ( _cBfppClass )
{
//.......
};
};
class Etaz_item: public TechObj
{
private:
NetTransferConstrol & cBfppClass;
public:
void func1();
void func2();
uint8_t getErrorPacket()
{
return cBfppClass.get_error_packet();
};
Etaz_item ( NetTransferConstrol & _cBfppClass )
: cBfppClass ( _cBfppClass )
{
//.......
};
};
т.е. есть какой-то класс NetTransferConstrol, описание которого находится где-то в другом месте, и сам класс Etaz_item, который принимает ссылку на обьект типа NetTransferConstrol. К классу Etaz_item относится 2 файла : Etaz.cpp, где описан код реализации всех функций класса, и Etaz.h, где находится реализация структуры класса.
И вот тут начинаются непонятные вещи, когда я код функции getErrorPacket() помещаю в Etaz.cpp, то проект компилируется, но если я перемещая код функции в класс, как показано в примере, то компилятор начинает ругаться
Цитата
./src/Etaz.h:166: error: invalid use of incomplete type 'struct NetTransferConstrol'
./src/Etaz.h:122: error: forward declaration of 'struct NetTransferConstrol'
./src/Etaz.h:122: error: forward declaration of 'struct NetTransferConstrol'
Почему компилятор генерирует ошибку в случае когда код функции описан прямо в классе, но ничего не выдает, когда эта же функция описана во внешнем файле(Etaz.cpp)? Возможно как-то получается ситуация когда класс типа Etaz_item "родился", а класс типа NetTransferConstrol еще нет, но тогда совсем непонятно как оно работает и где оно берет ссылку... И непонятно причем тут "struct NetTransferConstrol", ведь NetTransferConstrol обьявлен как class?
Пробовал имитировать подобную ситуацию в MinGW, но там все компилируется без проблем, так что считаю что это не синтаксическая ошибка...
Вопрос 2:
Как мне убедится что на момент создания класса Etaz_item, обьект типа NetTransferConstrol уже существует, и ссылка будет правильной?
Всем заранее спасибо за помощь!!!

З.Ы. Компилятор WinAVR 20080610
З.Ы.Ы. Обьекты создаются статически во время начальной инициализации