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

 
 
> 2 вопроса по Си++, WinAVR
kurtis
сообщение Aug 18 2008, 13:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Вопрос 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 уже существует, и ссылка будет правильной?

Всем заранее спасибо за помощь!!! smile.gif
З.Ы. Компилятор WinAVR 20080610
З.Ы.Ы. Обьекты создаются статически во время начальной инициализации
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kurtis   2 вопроса по Си++   Aug 18 2008, 13:06
- - Amper25   Ох уж эти HighLevel программеры. Ну зачем для MCU,...   Aug 18 2008, 13:31
- - SamHaris   Я бы так писал: Код#include <NetTransferConstr...   Aug 19 2008, 04:32
- - Сергей Борщ   Цитата(kurtis @ Aug 18 2008, 16:06) Вопро...   Aug 20 2008, 05:54
- - Kuzmi4   2 Сергей Борщ Цитата..Не поверите - чтобы использ...   Aug 20 2008, 07:30
|- - Сергей Борщ   Цитата(Kuzmi4 @ Aug 20 2008, 10:30) 2 Сер...   Aug 20 2008, 07:59
- - Kuzmi4   2 Сергей Борщ - ага , что-то похожее я встречал ко...   Aug 20 2008, 08:32
|- - dch   не используйте C++ - для коммерческого софта это н...   Aug 20 2008, 08:47
|- - sergeeff   Цитата(dch @ Aug 20 2008, 12:47) не испол...   Aug 20 2008, 09:25
- - Kuzmi4   2 dch - это почему же ??   Aug 20 2008, 08:47
|- - dch   Цитата(Kuzmi4 @ Aug 20 2008, 12:47) 2 dch...   Aug 20 2008, 15:35
- - Amper25   Ну что поаргументирую тут... "Ужасов" к...   Aug 20 2008, 09:06
|- - ReAl   Цитата(Amper25 @ Aug 20 2008, 12:06) 1.Ко...   Aug 20 2008, 11:00
|- - Сергей Борщ   Цитата(Amper25 @ Aug 20 2008, 12:06) Пока...   Aug 20 2008, 11:55
- - Amper25   Ну соглсен в принципе. Для успокоения души давай...   Aug 20 2008, 11:13
|- - Огурцов   Цитата(Amper25 @ Aug 20 2008, 11:13) Для ...   Aug 20 2008, 11:41
- - Amper25   Цитатазаказчик может сказать - не использовать опр...   Aug 20 2008, 15:51


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:04
Рейтинг@Mail.ru


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