Russian Qt Forum
Ноябрь 24, 2024, 18:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: :: error: collect2: ld returned 1 exit status  (Прочитано 24055 раз)
deM1d
Гость
« : Ноябрь 11, 2010, 12:55 »

Привет. У меня такая проблема.

Код:
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);

public slots:
    void tSlot();
signals:
    void tSignal();
};

#endif // DIALOG_H
Выше представлен обычный класс диалога, в котором я просто объявил 1 сигнал и 1 слот. При компиляции у меня появляется ошибка :: error: collect2: ld returned 1 exit status . Путем различных комбинаций я понял что проблема в определении слота. Т.е. если закомменить 2 строки с определением слота, то ошибок не возникает. Ну и вопрос естественно в том, почему это происходит? за ранее спасибо...
Записан
merke
Гость
« Ответ #1 : Ноябрь 11, 2010, 13:03 »

теперь в файле исходниках .cpp опиши класс т.е.

 void Dialog::tSlot();
{

}

и будет счастье

или дял наглядности смотри:

Код:
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);

public slots:
    void tSlot()
   {
     ....
     ....
     ....
   }
signals:
    void tSignal();
};
« Последнее редактирование: Ноябрь 11, 2010, 13:05 от Александр » Записан
deM1d
Гость
« Ответ #2 : Ноябрь 11, 2010, 13:23 »

на самом деле я уже пробовал это раньше... ну вот пример...
Код
#ifndef DIALOG_H
#define DIALOG_H
 
#include <QtGui/QDialog>
 
class QPushButton;
class QLabel;
 
class Dialog : public QDialog
{
   Q_OBJECT
 
public:
   Dialog(QWidget *parent = 0);
   Dialog *p;
 
QLabel *label;
QPushButton *button;
 
public slots:
   void tSlot();
signals:
   void tSignal();
 
};
 
#endif // DIALOG_H
Код
#include "dialog.h"
 
Dialog::Dialog(QWidget *parent)
   : QDialog(parent)
{
   QWidget::connect(p,SIGNAL(tSignal()),p,SLOT(tSlot()));
}
 
void Dialog::tSignal()
{
   p->show();
}
 
void Dialog::tSlot()
{
   p->close();
}
 

За сам код я не отвечаю, т.к. еще не до конца вьехал во всю суть, но вот при компиляции того, что выше все равно ошибка :: error: collect2: ld returned 1 exit status
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 11, 2010, 13:25 »

: error: collect2: ld returned 1 exit status - не сама ошибка. Закинь сюда полный лог сборки.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deM1d
Гость
« Ответ #4 : Ноябрь 11, 2010, 13:27 »

Выполняется сборка проекта test...
Настройки не изменились, этап qmake пропускается.
Запускается "C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `C:/Qt/QtProject/test/test-build-desktop'

C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make -f Makefile.Debug

mingw32-make[1]: Entering directory `C:/Qt/QtProject/test/test-build-desktop'

g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\4.7.0\include\QtCore" -I"..\..\..\4.7.0\include\QtGui" -I"..\..\..\4.7.0\include" -I"..\..\..\4.7.0\include\ActiveQt" -I"debug" -I"..\test" -I"." -I"..\..\..\4.7.0\mkspecs\win32-g++" -o debug\dialog.o ..\test\dialog.cpp

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\test.exe debug/main.o debug/dialog.o debug/moc_dialog.o  -L"c:\Qt\4.7.0\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4

mingw32-make[1]: Leaving directory `C:/Qt/QtProject/test/test-build-desktop'

mingw32-make: Leaving directory `C:/Qt/QtProject/test/test-build-desktop'

debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'

debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\test.exe] Error 1

mingw32-make: *** [debug] Error 2

Процесс "C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта test (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"

это все из консоли сборки...
в сообщениях о сборке только :: error: collect2: ld returned 1 exit status
« Последнее редактирование: Ноябрь 11, 2010, 13:29 от deM1d » Записан
BRE
Гость
« Ответ #5 : Ноябрь 11, 2010, 13:36 »

А это ты для чего написал?
Код
C++ (Qt)
void Dialog::tSignal()
{
   p->show();
}
 

Это не надо, это за тебя moc сделает...  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Ноябрь 11, 2010, 13:43 »

Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'

debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deM1d
Гость
« Ответ #7 : Ноябрь 11, 2010, 13:59 »

Цитировать
Это не надо, это за тебя moc сделает...
не суть дела))) меня больше интересует, почему не компилит)
Цитировать
Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'
debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

Что значит несколько определений? Я в заголовочном файле определяю, а в сипипи пишу реализацию, в чем причина то негодования?
Записан
BRE
Гость
« Ответ #8 : Ноябрь 11, 2010, 14:03 »

Цитировать
Это не надо, это за тебя moc сделает...
не суть дела))) меня больше интересует, почему не компилит)
Цитировать
Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'
debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

Что значит несколько определений? Я в заголовочном файле определяю, а в сипипи пишу реализацию, в чем причина то негодования?
Потому и не компилится. Ты описал и moc описал.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Ноябрь 11, 2010, 14:08 »

Для сигналов не нужна реализация.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
crossly
Гость
« Ответ #10 : Ноябрь 11, 2010, 14:09 »

ибо этим moc занимается... а если вы напишите еще и свою то и получите ошибку...
Записан
deM1d
Гость
« Ответ #11 : Ноябрь 13, 2010, 13:27 »

спасибо всем за помощь)) разъяснили)  Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 25.