2012-02-14 39 views
3
[email protected]:~/Desktop/notes/pomodoro> ls 
timer.cpp 

[email protected]:~/Desktop/notes/pomodoro> qmake -project 
[email protected]:~/Desktop/notes/pomodoro> qmake 
[email protected]:~/Desktop/notes/pomodoro> make 
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.05/qt/mkspecs/linux-g++-64 -I. -I../../../qtsdk-2010.05/qt/include/QtCore -I../../../qtsdk-2010.05/qt/include/QtGui -I../../../qtsdk-2010.05/qt/include -I. -I. -o timer.o timer.cpp 
g++ -m64 -Wl,-O1 -Wl,-rpath,/home/anisha/qtsdk-2010.05/qt/lib -o pomodoro timer.o -L/home/anisha/qtsdk-2010.05/qt/lib -lQtGui -L/home/anisha/qtsdk-2010.05/qt/lib -L/usr/X11R6/lib64 -lQtCore -lpthread 
timer.o: In function `DigitalClock::DigitalClock(QWidget*)': 
timer.cpp:(.text+0x151): undefined reference to `vtable for DigitalClock' 
timer.cpp:(.text+0x159): undefined reference to `vtable for DigitalClock' 
timer.cpp:(.text+0x1bc): undefined reference to `DigitalClock::staticMetaObject' 
timer.o: In function `main': 
timer.cpp:(.text+0x2c0): undefined reference to `vtable for DigitalClock' 
timer.cpp:(.text+0x2c9): undefined reference to `vtable for DigitalClock' 
timer.cpp:(.text+0x30f): undefined reference to `vtable for DigitalClock' 
timer.cpp:(.text+0x318): undefined reference to `vtable for DigitalClock' 
collect2: ld returned 1 exit status 
make: *** [pomodoro] Error 1 

マイpomodoro.pro:未定義の参照 ' - `デジタル時計:: staticMetaObjectへの未定義参照' - Qtの

###################################################################### 
# Automatically generated by qmake (2.01a) Tue Feb 14 10:32:09 2012 
###################################################################### 

TEMPLATE = app 
TARGET = timer 
DEPENDPATH += . 
INCLUDEPATH += . 

# Input 
SOURCES += timer.cpp 

マイtimer.cpp:

#include <QLCDNumber> 
#include <QtGui> 
#include <QApplication> 

class DigitalClock : public QLCDNumber 
{ 
    Q_OBJECT 
    public: 
     DigitalClock (QWidget *parent = 0); 
    private slots: 
     void showTime(); 
}; 

DigitalClock :: DigitalClock (QWidget *parent) : QLCDNumber (parent) 
{ 
    setSegmentStyle(Filled); 

    QTimer *timer = new QTimer(this); 
    connect (timer, SIGNAL(timeout()), this, SLOT(showTime())); 
    timer->start (1000); 

    showTime(); 

    setWindowTitle (tr ("Digital Clock")); 
    resize (150, 60); 
} 

void DigitalClock :: showTime() 
{ 
    QTime time = QTime::currentTime(); 
    QString text = time.toString("hh:mm"); 
    if ((time.second() % 2) == 0) 
     text[2] = ' '; 
    display(text); 
} 

int main (int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    DigitalClock clock; 
    clock.show(); 

    return app.exec(); 
} 

答えて

7

置く。

class DigitalClock : public QLCDNumber 
{ 
    Q_OBJECT 
    public: 
     DigitalClock (QWidget *parent = 0); 
    private slots: 
     void showTime(); 
}; 

を別々のヘッダーファイルに入れ、i tからcppへ。 は+ = \ digitalclock.h

マクロQ_OBJECTを1つのファイルで仕事に行くのではありません。この

HEADERSのようなプロジェクトファイルのヘッダファイル名を置くことを忘れてはいけません。 お手伝いをしてください。

+0

これは役立つかもしれませんが、これがうまくいかない理由は何ですか? –

+0

マクロが書かれている理由からです。 –

+1

http://stackoverflow.com/questions/1368584/qt-question-what-does-the-q-object-macro-do-why-do-all-qt-objects-need-this-maを参照してください。 Q_OBJECTは – dirk

3

このエラーは主に間違った参照を与えたために発生します。

  1. あなたはすべてのヘッダがプログラム
  2. に必要な追加されているかどうかをチェックし、PRIファイルを確認あなたはシングルトンオブジェクト

すなわちを持つことをクラスのオブジェクトを作成しようとしたかどうか

  • チェック、シングルトンオブジェクトを作成した場合、オブジェクトの作成は許可されません。例:

    //JSONDataManager class having singleton object 
    JSONDataManager* JSONDataManager::instance = 0; 
    
    JSONDataManager* JSONDataManager::Instance() { 
        if (instance == 0) { 
         instance = new JSONDataManager; 
        } 
        return instance; 
    } 
    
    //You can access its members as follows 
    JSONDataManager::Instance()->method(); 
    
    
    //You cannot do as follows 
    JSONDataManager jsonManager;