Bug 16564

Summary: class QwtData has non-virtual method without implementation
Product: Sisyphus Reporter: Alexey V. Novikov <shader>
Component: libqwtAssignee: Vitaly Lipatov <lav>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P2    
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 20278    
Bug Blocks:    

Description Alexey V. Novikov 2008-08-05 19:39:54 MSD
libqwt-devel-5.1.1-alt1
Класс QwtData (qwt_data.h) содержит метод QwtData &operator=(const QwtData &)
который не объявлен как виртуальный, но при этом libqwt.so.5.1.1 не содержит соответствующего символа.
Решение: добавить virtual в описание метода.
Comment 1 Vitaly Lipatov 2008-08-06 10:28:19 MSD
Как воспроизвести проблему?
В qwt_data.cpp есть
QwtArrayData& QwtArrayData::operator=(const QwtArrayData &data)
Comment 2 Alexey V. Novikov 2008-08-07 08:24:08 MSD
Виталик, никто и не спорит, что в классе QwtArrayData этот метод реализован.
Дело в том, что в классе QwtData этот метод не реализован.
Обычные программы вряд ли будут его использовать, но вот некоторые кодогенераторы...
Проверить можно вот на чем: ftp://ftp.gis-auto.ru/ruby-qt4-1.4.10-alt2.src.rpm
Если в нем оторвать первый кусок патча ruby-qt4-alt-fix-kalyptus.patch,
который относится к kalyptusCxxToSmoke.pm (это как раз и есть workaround данной проблемы), то в итоге получим unresolved symbol у libsmokeqt именно на QwtData &operator=(const QwtData &).
Comment 3 Vitaly Lipatov 2009-01-04 03:02:52 MSK
qwt_data.h:

class QWT_EXPORT QwtData:
...
    /*!
      Assignment operator (virtualized)
     */
    QwtData &operator=(const QwtData &);

Автор явно имел какой-то тайный умысел, написав слово virtualized.
Если я добавлю слово virtual, это изменит ABI библиотеки.
Возможно стоит авторам ruby-qt4 договориться с авторами libqwt? :)
Comment 4 Alexey V. Novikov 2009-01-08 08:44:42 MSK
(In reply to comment #3)

> Автор явно имел какой-то тайный умысел, написав слово virtualized.
Что именно имел в виду автор, для меня загадка. Возможно он просто забыл реализовать этот метод или объявить его виртуальным. А т.к. в обычной ситуации это ничем не грозит, то скорее всего он даже не в курсе.

> Если я добавлю слово virtual, это изменит ABI библиотеки.
По всей видимости.

> Возможно стоит авторам ruby-qt4 договориться с авторами libqwt? :)
Теперь это уже должна быть головная боль zerg@, если он все-таки собирается делать ruby-qt4 из kde4bindings и собирать это хозяйство с qwt (в последнем я не уверен).