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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leoleshucov008
14 / 14 / 1
Регистрация: 23.02.2010
Сообщений: 221
#1

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

18.04.2014, 20:25. Просмотров 449. Ответов 7
Метки нет (Все метки)

Привет! Помогите пожалуйста разобраться со организацией исходников.
Структура такова:
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
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 20:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сборка многофайлового приложения: ошибка LNK2005 (C++):

Компиляция и сборка многофайлового проекта - C++
Допустим, у меня есть такие файлы. SuperClass h - объявление, SuperClass cpp - реализация SubClass h - объявление, SubClass cpp -...

Беда с наследованием. Организация многофайлового приложения - C++
Вот написал такое вот чудо, работает если за коментировать любой из #include "kvadrat.h" #include "kolo.h" и соотвецтвенно их исполнения....

Ошибка при компиляции многофайлового проекта - C++
Добрый вечер. Возникает ошибка при компиляции проекта, состоящего из 3-х файлов. В программе использованы структуры и списки. Файл...

Ошибка LNK2005 - C++
Создал небольшой проект, чтобы разобраться в работе с C++. При компиляции выдает такую ошибку: Вот код проекта: Core.h ...

ошибка error LNK2005 - C++
В проекте структура и bool сравнение двух экземпляров . Выдает эту ошибку и fatal error LNK1169... struct Point3D { double x,y,z; ...

Ошибка LNK2005: многократное определение - C++
Написала вот такой код в VS 2013: /* файл table.h */ #define _CRT_SECURE_NO_WARNINGS #ifndef STRUCT_H #define STRUCT_H ...

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

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

Добавлено через 1 минуту
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Для каждого .h кроме Point.h есть соответствующий .cpp
Где реализации методов Point находятся?
0
Leoleshucov008
14 / 14 / 1
Регистрация: 23.02.2010
Сообщений: 221
19.04.2014, 17:21  [ТС] #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()
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.04.2014, 21:48 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leoleshucov008 Посмотреть сообщение
Реализация методов Point находится в Point.h
Нельзя делать реализацию в хедере, который подключается к нескольким .cpp.

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

Ошибка 19 error LNK2005. Многофайловое приложение - C++
У меня возникает ошибка Ошибка 19 error LNK2005: &quot;void __cdecl set_0(double *,int)&quot; (?set_0@@YAXPANH@Z) уже определен в...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" - C++
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_ #define golf_h_ const int Len =...

Работа многофайлового проекта - C++
С++ позволяет создавать многофайловые проект. Это повышает производительность, так как программа стает модульной и ее легко изменить и тд....

Создание многофайлового проекта в Borland 5.02 - C++
Кто знает как создать многофайловый проект в среде Borland 5.02


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru