Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться 
V
    Опции темы
JanryMayers
Дата 12.4.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Всем привет!

Тяжело объяснить, но я постараюсь, уж очень хочеться разобраться!

Есть класс

Код

class DomainObject
{
    public:
        DomainObject() {};
        virtual ~DomainObject() {};

    public:
        virtual int  Init() = 0;
        virtual int  GetObjectId() = 0;
        virtual int  Lock() = 0;
        virtual int  UnLock() = 0;
};


typedef

Код

typedef     boost::shared_ptr<DomainObject> DomainObjectPtr;


класс который реализует механизм сохранения instatnce объектов типа DomainObjectPtr

Код

class DomainEnvironment {
    public:
        DomainEnvironment();
        ~DomainEnvironment();

    public:
        DomainObjectPtr     RegisterNewObject( DomainObjectPtr );

        DomainObjectPtr     GetObject( int objId );

        DomainObjectPtr     RemoveObject( int objId );

    protected:
        DomObjectMap     m_ObjMap;    
        pthread_mutex_t  mutex;
};



задача следующая

я создаю класс, который наследуется от DomainObject

при попытке воспользоваться функцией RegisterNewObject сыпяться ошибки

подскажите как правильно мне передать в RegisterNewObject отнаследованый класс?

PM MAIL   Вверх
borisbn
Дата 12.4.2012, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Код
RegisterNewObject( DomainObjectPtr( new DerivedFromDomainObject() ) );

так не работает ?

Это сообщение отредактировал(а) borisbn - 12.4.2012, 17:39


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 12.4.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Код

class Foo : public DomainObject {};
boost::shared_ptr<DomainObject> (new Foo);


Добавлено через 25 секунд
borisbn успел раньше smile
PM MAIL   Вверх
JanryMayers
Дата 12.4.2012, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Не работает. Желательно с начала выделить память.

Код

DerivedFromDomainObject * derived_from_domain_object_ptr =  new DerivedFromDomainObject();

derived_from_domain_object_ptr->SetObjectId( 1 );

RegisterNewObject( DomainObjectPtr( derived_from_domain_object_ptr ) );


PM MAIL   Вверх
borisbn
Дата 12.4.2012, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(JanryMayers @  12.4.2012,  18:07 Найти цитируемый пост)
Не работает

Как ты написал - должен. Что пишет ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
JanryMayers
Дата 12.4.2012, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



error: cannot convert `DomainObjectPtr' to `DerivedFromDomainObject*' in assignment
PM MAIL   Вверх
baldina
Дата 12.4.2012, 18:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



в твоём коде нет присваивания (приведения) от DomainObjectPtr к DerivedFromDomainObject*
что-то скрываешь от нас ))
PM MAIL   Вверх
JanryMayers
Дата 12.4.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Так. Вот такая строчка приводит к ошибке

Код

DomainObjectPtr ptr = m_domain_environment_ptr->RegisterNewObject( DomainObjectPtr( new LODataManager ));



cannot convert `DerivedFromDomainObject*' to `DomainObject*' in initialization

PM MAIL   Вверх
borisbn
Дата 12.4.2012, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



LODataManager точно наследован от DomainObject ?
Цитата(JanryMayers @  12.4.2012,  18:33 Найти цитируемый пост)
cannot convert `DerivedFromDomainObject*' to `DomainObject*' in initialization

этот DerivedFromDomainObject я придумал  smile  ты просто копируй, что пишет компилятор и вставляй сюда.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
JanryMayers
Дата 12.4.2012, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Цитата(borisbn @  12.4.2012,  18:36 Найти цитируемый пост)
этот DerivedFromDomainObject я придумал


да ладно)), а я вот не заметил))....

я свой класс заменяю этим, что бы понятно было... если я щас напишу всю ошибку потянется куча всего...). Скажите может ли возникать данная ошибка изза того что предок и наследник существенно отличаются?

PM MAIL   Вверх
baldina
Дата 12.4.2012, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(JanryMayers @  12.4.2012,  18:39 Найти цитируемый пост)
предок и наследник существенно отличаются
 всегда, иначе зачем их разделять. что такое "существенно"? наследник вобщемто и есть предок, т.е. его всегда можно использовать в контексте предка.
птица <- аист
если можно что-то сказать про птицу (например, что она летает), то же самое можно про аиста. но не наоборот. потому что аист - птица (тип аиста унаследован от типа птица), но птица не всегда аист. в ООП то же самое.

...

предполагаю что ругается на LODataManager, и он не унаследован (открыто, public) от DomainObject
PM MAIL   Вверх
JanryMayers
Дата 12.4.2012, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Мда все работает спасибо). Спасибо, господа)!

Я тут много разных вариантов расматривал), ну обычная рабочая обстановка). И строчку наследования закоментил написав наследование от другого класса. Из чего следовала ошибка.)

baldina, можно задать вопрос в личку, что бы тут не создавать оффтоп?
PM MAIL   Вверх
baldina
Дата 13.4.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



можно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.