Не собирается программа, multiple definition |
Здравствуйте, гость ( Вход | Регистрация )
Не собирается программа, multiple definition |
Awesome |
26.1.2011, 22:07
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 26.1.2011 Пользователь №: 2370 Спасибо сказали: 0 раз(а) Репутация: 0 |
Написал свой класс, подключил к программе.
При попытке запустить в консоли сборки вылезают ошибки вида: tmp/obj/debug_shared/имя_класса.o:C:\Qt\2010.05\qt\имя_проекта/../../include/QtCore/../../src/corelib/global/qglobal.h:1381: multiple definition of `имя_класса::имя_метода()' Ошибок много, столько же, сколько у меня методов в классе, кроме тех, которые определены в объявлении (inline) Ну и в конце ещё collect2: ld returned 1 exit status Помогите пожалуйста, не могу разобраться. |
|
|
igor_bogomolov |
26.1.2011, 22:10
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Ну так ты код приложи, что бы было с чем разбираться
|
|
|
Awesome |
26.1.2011, 22:40
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 26.1.2011 Пользователь №: 2370 Спасибо сказали: 0 раз(а) Репутация: 0 |
Создаю в QtCreator проект GUI, создаю файл myclass.cpp:
Пишу в mainwindow.cpp
Жму "Выполнить". Полный текст консоли сборки: Раскрывающийся текст Выполняется сборка проекта nerabotaetclass... Настройки не изменились, этап qmake пропускается. Запускается "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" -w mingw32-make: Entering directory `C:/][/qt/nerabotaetclass-build-desktop' C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory `C:/][/qt/nerabotaetclass-build-desktop' g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\nerabotaetclass.exe debug/main.o debug/mainwindow.o debug/myclass.o debug/moc_mainwindow.o -L"c:\Qt\2010.05\qt\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4 mingw32-make[1]: Leaving directory `C:/][/qt/nerabotaetclass-build-desktop' mingw32-make: Leaving directory `C:/][/qt/nerabotaetclass-build-desktop' debug/myclass.o: In function `myClass': C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass/myclass.cpp:10: multiple definition of `myClass::myClass()' debug/mainwindow.o:C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass//myclass.cpp:10: first defined here debug/myclass.o: In function `myClass': C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass/myclass.cpp:10: multiple definition of `myClass::myClass()' debug/mainwindow.o:C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass//myclass.cpp:10: first defined here debug/myclass.o:C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass/myclass.cpp:14: multiple definition of `myClass::setAbc()' debug/mainwindow.o:C:\][\qt\nerabotaetclass-build-desktop/../nerabotaetclass//myclass.cpp:14: first defined here collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\nerabotaetclass.exe] Error 1 mingw32-make: *** [debug] Error 2 Процесс "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2. Возникла ошибка при сборке проекта nerabotaetclass (цель: Настольный компьютер) Во время выполнения сборки на этапе "Сборка" |
|
|
igor_bogomolov |
26.1.2011, 23:17
Сообщение
#4
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
|
|
|
Awesome |
27.1.2011, 0:01
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 26.1.2011 Пользователь №: 2370 Спасибо сказали: 0 раз(а) Репутация: 0 |
хм. Мой класс не был разделен на файлы заголовка и файлы с методами, и то и другое было в файле myclass.cpp
Видимо так нельзя, потому что после разделения класса на .h и .cpp всё, вроде бы, работает. Спасибо. |
|
|
silver47 |
27.1.2011, 7:36
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
multiple definition of
множественное объявление одного и того же. Не забываем про
А так да - лучше все таки делить на заголовочные и сорсные. |
|
|
Litkevich Yuriy |
27.1.2011, 21:04
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Awesome |
28.1.2011, 23:30
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 26.1.2011 Пользователь №: 2370 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, я вроде бы делал то, про что говорит silver47, да и инклуд у меня был всего один. Если только creator сам не добавил еще один куда-нибудь
|
|
|
Kagami |
29.1.2011, 10:10
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Файл назван *.cpp, поэтому он считается файлом исходных кодом. Из-за этого он компилируется два раза - один раз как файл myclass.cpp, второй - в составе mainwindow.cpp.
|
|
|
Гость_Гость_FantasyOR_*_* |
26.3.2012, 16:55
Сообщение
#10
|
Гости |
Раскрывающийся текст
Не сочтите за некрофилию Стиль программирования if(trHash.contains(str.at(i)) == true) в Вашем коде выше (взят был из http://www.forum.crossplatform.ru/lofivers....php/t3712.html ) недопустим. Вы в булевом условии сравниваете ответ с истиной?!?!?!?! надеюсь за год , Вы исправили эту свою привычку. посмотрите внимательно что получается: если ( (правда == правда)=правда )... если ( (ложь == правда)=ложь )... у Вас ответ и так правда или ложь, зачем её сравнивать ещё раз? должно быть: if ( trHash.contains(str.at(i)) ) ... contains - возвращает bool. bool - это синтетический тип на самом деле это int 0 = false <0> = true - любое не нулевое значение, как положительное, так и отрицательное даст true if (1)... - true пойдёт в ветвь then if (-1)... - true пойдёт в ветвь then if (-909090)... - true пойдёт в ветвь then if (0)... - false пойдёт в ветвь else таким образом можно делать что-то вроде: if ( массив.size() )..., но конечно не стоит у массива(не только QVector, но и QList, и QStringList...) есть isEmpty() Ещё раз прошу прощения. Надеюсь за год Вы уже исправились. Просто это был шок и решил подсказать Вам как правильно. |
|
|
Текстовая версия | Сейчас: 29.3.2024, 10:30 |