Russian Qt Forum
Май 16, 2024, 08:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: setVisible (undefined reference)  (Прочитано 5321 раз)
makes
Гость
« : Июнь 26, 2010, 02:30 »

Разобрался с сервером, теперь проблема с клиентом.
А именно, при сборке клиента выдается ошибка:
undefined reference to myLib::MyActiveX::setVisible.
Нэймспэйс myLib и класс MyActiveX сгенерированы dumpcpp'ом.

Как я понимаю, проблема в том, что в MyActiveX функция объявлена так:
Код:
inline void setVisible(bool p_visible);
а в его предке, QWidget, она виртуальна:
Код:
virtual void setVisible(bool visible);

Насколько я знаю, стандарт cpp не запрещает инлайнить виртуальные функции.
Так в чем проблема? как с этим бороться?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июнь 26, 2010, 09:25 »

Цитировать
inline void setVisible(bool p_visible);

А где находится реализация этого метода?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
makes
Гость
« Ответ #2 : Июнь 26, 2010, 11:42 »

А где находится реализация этого метода?

Так в том же хедере, ниже:
Код:
inline void MyActiveX::setVisible(bool p_visible)
{
    void *_a[] = {0, (void*)&p_visible};
    qt_metacall(QMetaObject::InvokeMetaMethod, 57, _a);
}
Записан
makes
Гость
« Ответ #3 : Июнь 26, 2010, 17:45 »

Понял откуда рога растут, однако проблему не решил.

dumpcpp сгененрировал два файла mylib.h и mylib.cpp.
В  mylib.cpp, перед иклюдом mylib.h, определен макрос, который отключает часть mylib.h, в котором определяются методы класса (объявлены они выше). Соответственно, определения, методов не видны в mylib.cpp, и отсюда ошибка:
debug/mylib.o:mylib.cpp:(.rdata$_ZTVN5mylib9MyActiveXE[vtable for mylib::MyActiveX]+0x3c): undefined reference to `mylib::MyActiveX::setVisible(bool)'.
Вопрос, почему отключено определение методов для mylib.cpp если компилятору (в данном случае g++) они там требуются?
Или это те самые "маленькие отличия" различных компиляторов от стандарта?
Что делать: менять dumpcpp или компилятор или что-то где-то настроить можно?
Записан
makes
Гость
« Ответ #4 : Июнь 27, 2010, 23:25 »

"... четвертые сутки пылают станицы ..."  Смеющийся
(извините, это нервное)

Что делать: менять dumpcpp или компилятор или что-то где-то настроить можно?

Ответ (сам себе отвечаю Подмигивающий ): менять компилятор!
Сменил компилер на VC2008, и, о!, приложение собралось!!! (т.е. dumpcpp не под все компиляторы заточен)
И все равно - жопа!!! (чуть не выругался) Подробности здесь:
http://www.prog.org.ru/topic_14104_0.html
« Последнее редактирование: Июнь 27, 2010, 23:30 от makes » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 19.