Cześć. Dzisiaj natrafiłem na dziwny problem, z którym niestety nie mogę sobie poradzić.
Podczas pracy nad aplikacją po dodaniu nowego sygnału kompilacja programu kończy się z następującym komunikatem o błędzie
undefined reference to `MusicItem::titleChanged(QString, QString)'
undefined reference to `MusicItem::invalid()'
bad reloc address 0x13 in section `.eh_frame'
Uruchamianie qmake, czyszczenie, budowanie od nowa projektu niestety nie pomaga. Także ponowne uruchomienie komputera.
Zamieszczam również kod klasy
musicitem.h
#ifndef MUSICITEM_H
#define MUSICITEM_H
#include <QObject>
#include <QDateTime>
class MusicItem : public QObject
{
Q_OBJECT
public:
explicit MusicItem(QObject *parent = 0);
QString videoTitle() { return vTitle; }
QString videoID() { return vID; }
QDateTime dateTime() { return dt; }
int itemID() { return id; }
bool operator<(MusicItem &other) const { return dt < other.dateTime(); }
bool operator>(MusicItem &other) const { return dt > other.dateTime(); }
bool operator==(MusicItem &other) const { return vID == other.videoID(); }
signals:
void titleChanged(QString vidID, QString title);
void invalid();
public slots:
void setVideoTitle(QString vID, QString title);
void setVideoTitle(QString title);
void setVideoID(QString id) { vID = id; }
void setDateTime(QDateTime date) { dt = date; }
void setID(int newID) { id = newID; }
private:
QString vTitle;
QString vID;
int id;
QDateTime dt;
};
#endif // MUSICITEM_H
musicitem.cpp
#include "musicitem.h"
MusicItem::MusicItem(QObject *parent) :
QObject(parent)
{
}
void MusicItem::setVideoTitle(QString vID, QString title)
{
if(vID == videoID()) {
vTitle = title;
emit titleChanged(vID, title);
}
}
void MusicItem::setVideoTitle(QString title)
{
vTitle = title;
if(title.isEmpty()) emit invalid();
}
Jeżeli wykomentuję sygnał invalid(); kompilacja przebiega poprawnie i program uruchamia się. Nasuwa mi się pytanie: WTF? Kolejna anomalia w Qt czy po zabawie z tym błędem nie widzę już nawet prostego błędu?