2009-07-15 3 views
6

У меня есть ошибка сборки с слотом в Qt. У меня есть класс, который имеет открытый слот:Qt и C++ - неопределенная ссылка на слот

void doSomething(); 

В конструктор этого класса я сделать:

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

У меня есть QLineEdit - объект Текст_откуда. Ошибка сборки

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

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

Помоги мне, пожалуйста (:

+0

Это не кажется достаточно информации, на самом деле. Если вы прокомментируете заявление о соединении, ошибка даже исчезнет? – dborba

ответ

15

недействительного йоЗотеЬЫпда(), выглядит как надрез из заголовка файла, вы реализовать слот для себя

1

быстрого примечание о синтаксисе? : Обычно вы будете использовать либо

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

, которая в основном эквивалентна

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

Что вы будете делать, если вы звоните откуда-то не внутри QObject.
Хотя этот синтаксис:

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

также разумно. Но этот синтаксис:

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

просто сбивает с толку и дублирует код.

+0

... и выдает предупреждение о компиляторе, потому что 5-arg QObject :: connect() является статическим методом ... –

0

Я получал такую ​​же ошибку в сборке Qt.

я добавлял слот для сигнала закончил из QProcess - DOCO, на котором говорит:

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

Мой код:

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

компиляция сгенерирована: /home/ttguy/kdenlive/kdenlive_git/build-kdenlive-Desktop-Default/src/moc_freesound.cpp:121: ошибка: неопределенная ссылка на `FreeSound :: slotPreviewFinished (int, QProcess :: статус_завершения)»

И исправление было префикс моего выполнения slotPreviewFinished с Freesound ::

void FreeSound::slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus) 
{ 
    qDebug()<<"// slotPreviewFinished: "<<exitCode; 
} 
Смежные вопросы