Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Написал программу в Qt, хочу откомпилировать и отладить, а он мне выдаёт: QT./debug\test.o: In function `Z11systemTimerv': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:6: multiple definition of `systemTimer()' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:6: first defined here ./debug\test.o: In function `Z15mod_bus_HoldRegt': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:11: multiple definition of `mod_bus_HoldReg(unsigned short)' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:11: first defined here ./debug\test.o: In function `Z11excludeUnitR15PowerManagementR10CommonDataRKh': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:34: multiple definition of `excludeUnit(PowerManagement&, CommonData&, unsigned char const&)' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:34: first defined here ./debug\test.o: In function `Z16writeOutputStateR10CommonData': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:48: multiple definition of `writeOutputState(CommonData&)' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:48: first defined here ./debug\test.o: In function `Z18writeOutputResultsPA5_11Measurement': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:57: multiple definition of `writeOutputResults(Measurement (*) [5])' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:57: first defined here ./debug\test.o: In function `Z14changeUDefinedR15PowerManagementRK13USetupDefinedRh': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:330: multiple definition of `changeUDefined(PowerManagement&, USetupDefined const&, unsigned char&)' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:330: first defined here ./debug\test.o: In function `Z12changeURangeR15PowerManagementRK11USetupRangeRt': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:345: multiple definition of `changeURange(PowerManagement&, USetupRange const&, unsigned short&)' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:345: first defined here ./debug\test.o: In function `Z12checkResultsR15PowerManagementR10CommonDataPA5_11MeasurementhPA4_K8DblRange': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:1055: multiple definition of `checkResults(PowerManagement&, CommonData&, Measurement (*) [5], unsigned char, DblRange const (*) [4])' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest//test.cpp:1055: first defined here collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\ACTest.exe] Error 1 mingw32-make: *** [debug] Error 2 Процесс "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" завершился с кодом %2. Хотя всё объявлено один раз. синтаксис должен соответствовать С99. Что я не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 09:26 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Файл после нажатия "Предварительный просмотр" открепился - глюк форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 09:28 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
DymanovskyХотя всё объявлено один раз main.cpp: #include "test.cpp" Из-за этого тела функций, объявленных в test.cpp, дублируются в двух разных единицах трансляции: main.cpp и test.cpp Вообще include применяется только для включения заголовков *.h, в которых описываются только прототипы, но не тела функций. Бывают исключения (генерация однотипного кода), но не в подобных случаях: нет ни единой причины включать одни *.cpp из проекта в другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 11:02 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Я тут уже по разному переставлять пробовал. Это один из варинатов. Если писать в стиле С, то тела всех статических функций должны находится в .h? А то я писал в .cpp static void foo () { //... } а потом в .h static void foo () ; Он ругался в .h на undefined reference, а в .cpp, что функция не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 11:11 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Функции, которые должны быть видимы в нескольких единицах трансляции, не должны быть static (ни тело ни прототип). В *.h - поместить прототипы в *.cpp - тела ф-й В те *.cpp, где нужно использовать функцию, включить соответствующий *.h ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 11:27 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Все функции, которые должны быть видны в других модулях сделал обычными, остальные static. Он ругается на переменные, что они объявлены несколько раз. Что ещё не так? Или нельзя обращаться к глобальным переменным из статических функций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 12:54 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Попробовал сделать все функции обычными (не static) - один чёрт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 13:15 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
DymanovskyОн ругается на переменные, что они объявлены несколько раз. Что ещё не так? потому что не так всё с глобальными переменными в C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 13:36 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
И всё равно не помогает. вынес в.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Оставил в .h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. все константы оставил в .h и сделал static. Но он почему то упорно считает, что переменная Код: plaintext Код: plaintext 1. 2. 3. дважды. Не понимаю как скомпилировать эту программу. Что тут не так????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 14:17 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Dymanovsky, Забыл, что объявил ее еще где-то. Пора бросать думать, начинать промывать мозг ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 14:48 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
DymanovskyНо он почему то упорно считает... Приведите сообщение об ошибке и последний вариант исходников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 14:51 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Поиском по файлам проекта проверил. переменная gaugesExchange объявлена в одном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 14:52 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Последний вариант исходников в файле. Сообщения об ошибках (Уже 2-й день мучаюсь) Qt creator + min-gw./debug\test.o: In function `systemTimer': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:21: multiple definition of `gaugesExchange' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/main.cpp:8: first defined here ./debug\test.o: In function `mod_bus_HoldReg': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:26: multiple definition of `measurements' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/main.cpp:9: first defined here ./debug\test.o: In function `excludeUnit': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:56: multiple definition of `regModBus' ./debug\main.o:main.cpp:(.bss+0x120): first defined here ./debug\test.o: In function `jumpLoad': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:1057: multiple definition of `coeffTable' ./debug\main.o:main.cpp:(.bss+0x2120): first defined here ./debug\test.o: In function `checkResults': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:1088: multiple definition of `powerData' ./debug\main.o:main.cpp:(.bss+0x2220): first defined here ./debug\testemu.o: In function `Z11emuLoadDatav': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/testemu.cpp:6: multiple definition of `gaugesExchange' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/main.cpp:8: first defined here ./debug\testemu.o: In function `Z11emuLoadDatav': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/testemu.cpp:8: multiple definition of `measurements' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/main.cpp:9: first defined here ./debug\testemu.o: In function `Z11emuLoadDatav': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/testemu.cpp:37: multiple definition of `regModBus' ./debug\main.o:main.cpp:(.bss+0x120): first defined here ./debug\testemu.o:testemu.cpp:(.bss+0x2120): multiple definition of `coeffTable' ./debug\main.o:main.cpp:(.bss+0x2120): first defined here ./debug\testemu.o:testemu.cpp:(.bss+0x2220): multiple definition of `powerData' ./debug\main.o:main.cpp:(.bss+0x2220): first defined here collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\ACTest.exe] Error 1 mingw32-make: *** [debug] Error 2 Процесс "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" завершился с кодом %2. Возникла ошибка при сборке проекта ACTest (цель: Настольный компьютер) Во время выполнения сборки на этапе "Сборка" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 15:10 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
DymanovskyQt creator + min-gw./debug\test.o: In function `systemTimer': C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/test.cpp:21: multiple definition of `gaugesExchange' ./debug\main.o:C:\Users\Alexander.Dumanovski\Documents\QT_Projects\ACTest-build-desktop/../ACTest/main.cpp:8: first defined here Данные ошибки ссылаются на строки в которых нет соответствующих имен. Т.е. либо это ошибки к другой версии исходников, либо при сборке некорректно отслеживаются зависимости и часть модулей не перекомпилировалось при изменении исходников. Начните с удаления всех *.o Если не поможет - будем смотреть дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2011, 15:52 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
Уррраааааа! запустил. Интересно, это глюк gcc? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2011, 08:44 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
DymanovskyУррраааааа! запустил. Интересно, это глюк gcc? Если удаление *.o помогло, то это значит что система сборки некорректно отслеживает зависимости. GCC тут не причем, он всего лишь компилирует что ему скажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2011, 12:29 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
реанимирую форум для тех, кто придёт сюда позже по ссылке гугла ( как и я ) =) проблема была в том, что в *.pro файл (проектный файл в Qt) дважды был включён один и тот же *.cpp файл с определением функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 15:22 |
|
||
|
Как победить multiple definition, которого в явном виде нет?
|
|||
|---|---|---|---|
|
#18+
unregistred_grinреанимирую форум для тех, кто придёт сюда позже по ссылке гугла ( как и я ) =) проблема была в том, что в *.pro файл (проектный файл в Qt) дважды был включён один и тот же *.cpp файл с определением функции. И правда! Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2014, 13:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38370791&tid=2019207]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
84ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 337ms |
| total: | 511ms |

| 0 / 0 |
