Вопрос 1:
Есть функция
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 )
{
//.......
};
};
т.е. есть какой-то класс
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'
Почему компилятор генерирует ошибку в случае когда код функции описан прямо в классе, но ничего не выдает, когда эта же функция описана во внешнем файле(Etaz.cpp)? Возможно как-то получается ситуация когда класс типа
Etaz_item "родился", а класс типа
NetTransferConstrol еще нет, но тогда совсем непонятно как оно работает и где оно берет ссылку... И непонятно причем тут "
struct NetTransferConstrol", ведь NetTransferConstrol обьявлен как
class?
Пробовал имитировать подобную ситуацию в MinGW, но там все компилируется без проблем, так что считаю что это не синтаксическая ошибка...
Вопрос 2:
Как мне убедится что на момент создания класса
Etaz_item, обьект типа
NetTransferConstrol уже существует, и ссылка будет правильной?
Всем заранее спасибо за помощь!!!
З.Ы. Компилятор WinAVR 20080610
З.Ы.Ы. Обьекты создаются статически во время начальной инициализации