40 / 21 / 3
Регистрация: 27.04.2015
Сообщений: 176
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Как избавиться от multiple definition?29.08.2017, 10:45. Показов 43608. Ответов 9
Метки нет (Все метки)
Есть header:
Код
build/Debug/GNU-Linux/Game.o: In function `isValidCoord(Coord const&)': /home/elchin/CppApplication_1/base.hpp:42: multiple definition of `isValidCoord(Coord const&)' build/Debug/GNU-Linux/Figure.o:/home/elchin/CppApplication_1/base.hpp:42: first defined here build/Debug/GNU-Linux/Player.o: In function `isValidCoord(Coord const&)': /home/elchin/CppApplication_1/base.hpp:42: multiple definition of `isValidCoord(Coord const&)' build/Debug/GNU-Linux/Figure.o:/home/elchin/CppApplication_1/base.hpp:42: first defined here build/Debug/GNU-Linux/Resources.o: In function `isValidCoord(Coord const&)': /home/elchin/CppApplication_1/base.hpp:42: multiple definition of `isValidCoord(Coord const&)' build/Debug/GNU-Linux/Figure.o:/home/elchin/CppApplication_1/base.hpp:42: first defined here build/Debug/GNU-Linux/State.o: In function `isValidCoord(Coord const&)': /home/elchin/CppApplication_1/base.hpp:42: multiple definition of `isValidCoord(Coord const&)' build/Debug/GNU-Linux/Figure.o:/home/elchin/CppApplication_1/base.hpp:42: first defined here
0
|
29.08.2017, 10:45 | |
Ответы с готовыми решениями:
9
Multiple definition of smth Multiple definition of function - linker error Как избавиться от E2238 Multiple declaration ? multiple definition |
Диссидент
27709 / 17325 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
||||||
29.08.2017, 12:01 | 3 | |||||
Один из способов
И. да, повторю за предыдущим оратором В каждом из cpp- модулей (и объектных o- модулях) будет реализация этой функции. Линковщик в замешательстве - какую из них использовать?
2
|
Модератор
8941 / 6708 / 920
Регистрация: 14.02.2011
Сообщений: 23,649
|
|
29.08.2017, 12:08 | 4 |
Сообщение было отмечено elch10 как решение
Решение
если возникнет вопрос с переменными
то для них есть extern Добавлено через 4 минуты потому что Си файлы компилируются в разное время и при компиляции одного компилятор ничего не знает про другой создаются куча объектных файлов не связанных друг с другом а вот линковшик видит все объектные файлы и
2
|
40 / 21 / 3
Регистрация: 27.04.2015
Сообщений: 176
|
|
29.08.2017, 12:43 [ТС] | 7 |
Да действтельно вынес в cpp - заработало.
Возникает другой вопрос, а почему тогда вынесение реализации в cpp файл не выдает ту же ошибку, ведь впринципе ничего не меняется?
0
|
Модератор
8941 / 6708 / 920
Регистрация: 14.02.2011
Сообщений: 23,649
|
|
29.08.2017, 18:53 | 9 |
Сообщение было отмечено elch10 как решение
Решение
очень даже меняется
макрос include просто подставляет текст заголовочного файла в Си файлв результате в каждом Си файле есть линкер видит стопитсот функций с именем isValidCoord и сходит с ума а в случае реализации в Си файле функция только одна, в заголовочном только объявление функции а не реализация
2
|
Диссидент
27709 / 17325 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
29.08.2017, 22:21 | 10 |
И придется повторить вопрос еще разок
А она работает чрезвычайно просто. Без всякой мистики. Больше я этот вопрос повторять не намерен. Имеющий уши - да слышит! Имеющий хотя бы один глаз - да видит! Имеющий хоть капельку мозгов - да думает!
0
|
29.08.2017, 22:21 | |
29.08.2017, 22:21 | |
Помогаю со студенческими работами здесь
10
multiple definition of Multiple definition Ошибка multiple definition Непобедимый `multiple definition` Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |