2009-07-15 8 views
6

J'ai une erreur de construction avec un emplacement dans Qt. J'ai une classe qui a une fente publique:Qt et C++ - référence non définie à l'emplacement

void doSomething(); 

dans le constructeur de cette classe je fais:

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

Je QLineEdit - objet textFrom. L'erreur de construction est

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

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

Aidez-moi, s'il vous plaît (:

+0

Cela ne semble pas assez d'informations vraiment. Si vous commentez votre déclaration de connexion, l'erreur disparaît-elle? – dborba

Répondre

15

void doSomething(), ressemble à un petit bout du fichier d'en-tête, avez-vous implémentez la fente se

1

note rapide sur la syntaxe? : Habituellement, vous utilisez soit

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

qui est essentiellement équivalent à

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

Ce que vous ferez si vous appelez d'un endroit qui n'est pas dans un objet QObject.
Bien que cette syntaxe:

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

est également raisonnable. Mais cette syntaxe:

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

est juste le code source de confusion et les doublons. Je recevais la même erreur dans une construction Qt

+0

... et lance un avertissement du compilateur, car QObject :: connect() à 5 arguments est une méthode statique ... –

0

J'ajoutais une fente pour le signal terminé de QProcess - le doco sur lequel dit:

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

Mon 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; 
} 

compilant ce qui précède généré: /home/ttguy/kdenlive/kdenlive_git/build-kdenlive-Desktop-Default/src/moc_freesound.cpp:121: erreur: référence non définie à `FreeSound :: slotPreviewFinished (int, QProcess :: ExitStatus) »

Et le correctif était de préfixer ma mise en œuvre de slotPreviewFinished avec FreeSound ::

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