2009-07-15 12 views
6

Ich habe einen Build-Fehler mit einem Steckplatz in Qt. Ich habe eine Klasse, die einen öffentlichen Schlitz:Qt und C++ - undefinierter Verweis auf Steckplatz

void doSomething(); 

In Konstruktor dieser Klasse i tun:

this->connect(ui->textFrom, SIGNAL(returnPressed()), 
       this, SLOT(doSomething())); 

Ich habe QLineEdit - textFrom Objekt. Der Build-Fehler ist

../moc_mainwindow.cpp:66: undefined reference to `MainWindow::doSomething()' 

:-1: error: collect2: ld returned 1 exit status

Helfen Sie mir, bitte (:

+0

Dies scheint nicht wie wirklich genug Informationen. Wenn Sie Ihre Verbindungsaussage auskommentieren, verschwindet der Fehler sogar? – dborba

Antwort

15

Leere doSomething(); sieht aus wie ein Schnipsel aus der Header-Datei, haben Sie den Schlitz selbst implementieren

1

kurze Notiz über Syntax? : In der Regel würden Sie entweder

connect(from, SIGNAL(sig()), to, SLOT(slot())); 

zu

verwenden, die im Grunde gleichwertig ist 0

Was tun Sie, wenn Sie von einem Ort aus anrufen, der sich nicht in einem QObject befindet?
Während dieser Syntax:

to->connect(from, SIGNAL(sig()), SLOT(slot())); 

ist auch vernünftig. Aber diese Syntax:

to->connect(from, SIGNAL(sig()), to, SLOT(slot())); 

ist nur verwirrend und Dubletten-Code.

+0

... und wirft eine Compiler-Warnung, weil 5-arg QObject :: connect() eine statische Methode ist ... –

0

Ich bekam den gleichen Fehler in einem Qt-Build.

Ich war das Hinzufügen eines Schlitz für das Signal fertig von QProcess - die doco, auf der sagt:

void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus) 

Mein Code:

freesound.h

void slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus); 

freensound. cpp

m_previewProcess = new(Qprocess); 
connect (m_previewProcess ,SIGNAL (finished(int , QProcess::ExitStatus)),this,SLOT(slotPreviewFinished(int , QProcess::ExitStatus))); 

void slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus) 
{ 
    qDebug()<<"// slotPreviewFinished: "<<exitCode; 
} 

Kompilieren des oben Generierten: /home/ttguy/kdenlive/kdenlive_git/build-kdenlive-Desktop-Default/src/moc_freesound.cpp:121: Fehler: undefinierter Verweis auf `FreeSound :: slotPreviewFinished (int, QProcess :: ExitStatus)‘

Und das Update war meine Implementierung von slotPreviewFinished mit Freesound Präfix ::

void FreeSound::slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus) 
{ 
    qDebug()<<"// slotPreviewFinished: "<<exitCode; 
}