2013-10-04 11 views
7

से विरासत के बाद क्यूटी "सिग्नल अपरिभाषित संदर्भ त्रुटि" मुझे हाल ही में कक्षा में एक सिग्नल जोड़ने की आवश्यकता है, इसलिए मैंने वर्ग को QObject से प्राप्त करने के लिए बदल दिया और Q_OBJECT मैक्रो को क्लास परिभाषा में जोड़ा।QObject

// File clicommand.h 
#include <QString> 
#include <QStringList> 
#include <QTcpSocket> 
#include "telnetthread.h" 
class CLICommand : public QObject 
{ 
Q_OBJECT 
public: 
    CLICommand(TelnetThread *parentTelnetThread); 
signals: 
    void signal_shutdown_request(); 
private: 
    TelnetThread *m_parentTelnetThread; 

और दूसरा त्रुटि "संकेत अपरिभाषित संदर्भ 'CLICommand के लिए vtable' के लिए त्रुटि": ऐसा करने से जब से मैं नीचे वर्ग लाइन पर त्रुटि " 'CLICommand के लिए vtable' के लिए संकेत अपरिभाषित संदर्भ त्रुटि" मिल नीचे लाइन (सदस्य चर intializing) पर:

// File clicommand.cpp 
#include <QDebug> 
#include <QTcpSocket> 
#include <QTextStream> 
#include "version.h" 
#include "clicommand.h" 
#include "telnetthread.h" 
#include "logger.h" 
CLICommand::CLICommand(TelnetThread *parentTelnetThread) 
    : m_parentTelnetThread(parentTelnetThread) 
{ 
} 

और सिर्फ यहाँ है, जहां मैं संकेत फेंकना।

// file shutdown_clicommand.cpp 
#include <QIODevice> 
#include "clicommand.h" 
#include "logger.h" 
#include "version.h" 
void CLICommand::execute_shutdown(const QStringList &commandLineFragments) 
{ 
    emit signal_shutdown_request(); 
} 

मैं इस विषय पर पदों की एक गुच्छा पढ़ा है, लेकिन कोई भी लागू करने के लिए लग रहे हैं: फेंकना लाइन `CLICommand :: signal_shutdown_request() ' करने के लिए त्रुटि अपरिभाषित संदर्भ उत्पन्न करता है। मैंने साफ/पुनर्निर्माण की भी कोशिश की। मैं बूस्ट या अन्य पुस्तकालयों का उपयोग नहीं कर रहा हूं ... बस क्यूटी 5

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?


समाधान: क्यूटी निर्माता में, प्रोजेक्ट पर राइट क्लिक करें, रन क्यूमेक का चयन करें, फिर सभी को पुनर्निर्माण करें। REBUILD सभी चलाने के बारे में अन्य पोस्ट गलत हैं ... अपने आप पर qmake नहीं चलाएगा।

उत्तर

12

आपको यह सुनिश्चित करने की ज़रूरत है कि उन बदलावों के लिए 'moc' (re) चलाया जाए। ऐसा लगता है कि आप या तो जेनरेट की गई एमओसी फाइल को याद करते हैं, या यह पुराना है और इसलिए वर्तमान स्थिति का उचित संदर्भ नहीं है।

Q_OBJECT मैक्रो जोड़े जाने पर QtCreator qmake ठीक से नहीं चलाता है। यह एक लंबा खड़ा मुद्दा रहा है, इसलिए आपको इसे मैन्युअल रूप से पुन: चालू करने की आवश्यकता होगी।

https://bugreports.qt.io/browse/QTCREATORBUG-231

एक अच्छा और सरल जवाब के साथ
+0

हमेशा की तरह, धन्यवाद +1 –

+0

शायद सबसे आसान तरीका स्पष्ट रूप से जब क्यूटी निर्माता का उपयोग कर 'qmake' को फिर से चलाएं को सीधे निर्माण करने के लिए जाने के लिए और Makefile' हटाने' है। फिर, अगली 'बिल्ड ऑल' एक्शन पर, क्यूटी निर्माता इसे पुन: उत्पन्न करता है, जैसे कि 'Q_OBJECT' परिवर्तन संबंधित लिंक त्रुटि दूर हो जाती है। – maxschlepzig

संबंधित मुद्दे