Форум программистов, компьютерный форум CyberForum.ru

Сборка многофайлового приложения: ошибка LNK2005 - C++

Восстановить пароль Регистрация
 
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
18.04.2014, 20:25     Сборка многофайлового приложения: ошибка LNK2005 #1
Привет! Помогите пожалуйста разобраться со организацией исходников.
Структура такова:
ColorButton.h в нем подключается Object.h и Panel.h
Panel.h в нем подключается Object.h и ColorButton.h
Object.h в нем подключается Point.h
Application.h в нем подключается Object.h
main.cpp подключает Application.h, ColorButton.h и Panel.h

Для каждого .h кроме Point.h есть соответствующий .cpp, где определена реализация методов классов.

Получаю ошибку LNK2005: метод Point::metod_name() уже определен в Application.obj
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 20:25     Сборка многофайлового приложения: ошибка LNK2005
Посмотрите здесь:

C++ создание многофайлового проекта в Borland 5.02
C++ LNK2005
Ошибка LNK2005 C++
C++ Сложности с построением многофайлового решения
C++ Беда с наследованием. Организация многофайлового приложения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:40     Сборка многофайлового приложения: ошибка LNK2005 #2
Вот это уже плохо:
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
ColorButton.h в нем подключается ... Panel.h
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Panel.h в нем подключается ... ColorButton.h
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
18.04.2014, 21:01  [ТС]     Сборка многофайлового приложения: ошибка LNK2005 #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это уже плохо:
Сообщение от Leoleshucov008
ColorButton.h в нем подключается ... Panel.h
Сообщение от Leoleshucov008
Panel.h в нем подключается ... ColorButton.h
А как в таком случае поступать?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
18.04.2014, 23:03     Сборка многофайлового приложения: ошибка LNK2005 #4
Leoleshucov008, Переместить всё в один файл
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.04.2014, 00:09     Сборка многофайлового приложения: ошибка LNK2005 #5
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
А как в таком случае поступать?
Смотря что в этих хедерах: указатели на другой класс, или объекты другого класса.

Добавлено через 7 минут
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Получаю ошибку LNK2005: метод Point::metod_name() уже определен в Application.obj
И где у вас ещё определён Point::metod_name(), кроме Application.cpp?

Добавлено через 1 минуту
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Для каждого .h кроме Point.h есть соответствующий .cpp
Где реализации методов Point находятся?
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
19.04.2014, 17:21  [ТС]     Сборка многофайлового приложения: ошибка LNK2005 #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Сообщение от Leoleshucov008
А как в таком случае поступать?
Смотря что в этих хедерах: указатели на другой класс, или объекты другого класса.
В ColorButton.cpp подключается ColorButton.h. В ColorButton.cpp есть метод в котором такая строчка
C++
1
if(Panel *p = dynamic_cast<Panel*>(obj)) //obj - тип Object
.
Аналогично и в Panel.cpp
C++
1
if(ColorButton *p = dynamic_cast<ColorButton*>(obj)) //obj - тип Object
.
Цитата Сообщение от alsav22 Посмотреть сообщение
Сообщение от Leoleshucov008
Получаю ошибку LNK2005: метод Point::metod_name() уже определен в Application.obj
И где у вас ещё определён Point::metod_name(), кроме Application.cpp?
Добавлено через 1 минуту
Сообщение от Leoleshucov008
Для каждого .h кроме Point.h есть соответствующий .cpp
Где реализации методов Point находятся?
Реализация методов Point находится в Point.h после описания класса Point. Там и определен Point::method_name()
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.04.2014, 21:48     Сборка многофайлового приложения: ошибка LNK2005 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Реализация методов Point находится в Point.h
Нельзя делать реализацию в хедере, который подключается к нескольким .cpp.

Добавлено через 2 минуты
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
В ColorButton.cpp есть метод в котором такая строчка
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Аналогично и в Panel.cpp
При чём здесь .cpp? Ещё раз:
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
А как в таком случае поступать?
Цитата Сообщение от alsav22 Посмотреть сообщение
Смотря что в этих хедерах: указатели на другой класс, или объекты другого класса.
Добавлено через 2 минуты
В ColorButton.h зачем Panel.h подключен, и наоборот? Хедеры эти покажите.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 22:40     Сборка многофайлового приложения: ошибка LNK2005
Еще ссылки по теме:

Работа многофайлового проекта C++
C++ Ошибка 19 error LNK2005. Многофайловое приложение
Компиляция и сборка многофайлового проекта C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
19.04.2014, 22:40  [ТС]     Сборка многофайлового приложения: ошибка LNK2005 #8
alsav22, Спасибо, разобрался благодаря вам.
Сделал так. Реализацию Point в Point.cpp, и ColorButton.h Подключал не в Panel.h а в Panel.cpp
Yandex
Объявления
19.04.2014, 22:40     Сборка многофайлового приложения: ошибка LNK2005
Ответ Создать тему
Опции темы

Текущее время: 14:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru