2014-10-31 54 views
0

我在班上有一些信号,名称为requestFinished
另外我有插槽_finished,它应该激活该信号。
但我有错误undefined reference to MY_SIGNAL
这里是_finished对SOME_SIGNAL_NAME的未定义引用

void VK::_finished(QNetworkReply *reply) { 
    if (reply->error() != QNetworkReply::NoError) { 
     qDebug() << (QString) reply->readAll(); 
    } else { 
     QString json(reply->readAll()); 
     VKResponse *response = new VKResponse(json); 
     VKError *error = new VKError(json); 
     VKAnswer *answer = new VKAnswer(error, response); 
     emit requestFinished(answer); 
    } 
} 

这里是VK类:

class VK { 
    public: 
     VK(QString token); 
     void request(QString method, std::map<QString, QString> data); 
     ~VK(); 

    private: 
     QString token; 

    private slots: 
     void _finished(QNetworkReply *reply); 

    signals: 
     void requestFinished(VKAnswer *answer); 
}; 

正如你所看到的,它包含方法requestFinished的信号。我的问题是什么?谢谢。

+2

你的问题在'VK'类声明中缺少'Q_OBJECT'宏。 – vahancho 2014-10-31 12:34:59

+0

我删除它,因为我得到错误'未定义的引用VK'VIN'与它。谷歌说我这是虚拟方法的问题,但我没有他们。 //对不起我的英文 – Efog 2014-10-31 12:36:54

+1

'VK'也必须是'QObject'的子类用于信号/插槽工作 – 2014-10-31 12:41:36

回答

3

你VK类需要公开继承QObject的,包括Q_OBJECT作为第一件事情:

class VK: public QObject { 
    Q_OBJECT 
    public: 
     VK(QString token); 
     void request(QString method, std::map<QString, QString> data); 
     virtual ~VK(); 

    private: 
     QString token; 

    private slots: 
     void _finished(QNetworkReply *reply); 

    signals: 
     void requestFinished(VKAnswer *answer); 
}; 

,那么你将需要确保商务部正在对运行(通常这是自动的在QtCreator)

+0

感谢您的咨询。我添加了'Q_OBJECT',并从'QObject'继承了类。现在我有错误'未定义VK'的引用。 // upd:解决。我在析构函数中添加了'virtual',现在所有工作都正常。谢谢! – Efog 2014-10-31 12:42:37