|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
Правильное связывание .cpp & .h21.10.2019, 20:35. Показов 2632. Ответов 36
Метки нет (Все метки)
Доброго всем!
Обращаюсь за советом: как лучше и грамотнее написать? Есть 2 класса, назовем их класс А и класс В. Они и все их функции объявлены в А.h и B.h, соответственно. Реализация функций вынесена в файлы A.cpp и В.cpp, соответственно. Для сокращения размеров кода в функциях A.cpp и В.cpp, были созданы оптимизирующие функции в С.h Если я подключаю С.h в А.cpp и B.cpp, соответственно возникает переопределение, так как все срр на этапе компоновки "сливаются", а include просто подставляет определение функций дважды, что влечет за собой LNK2005-Переопределение. Собсна вопрос: как это можно грациозно обойти, не трогая ни А.h и B.h, ни A.cpp и В.cpp? С.h трогать можно.
0
|
|
| 21.10.2019, 20:35 | |
|
Ответы с готовыми решениями:
36
Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||||||||
| 21.10.2019, 21:58 | ||||||||
![]()
0
|
||||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 21.10.2019, 22:01 | |
|
Folian, это не мне, а компилятору - extern говорит компилятору, что в одном из cpp есть глобальное определение идентификатора
0
|
|
|
Комп_Оратор)
|
|
| 21.10.2019, 22:09 | |
|
Battary, объявления
void CycleAnimation() void UncycleAnimation() в заголовочник я бы положил. Это не важно, но для порядку. А уже его заинклудил бы в cpp-шники ваших классов. Фактически в C.h можно оставить объявления, а в C.cpp перенести определения. C.h соответственно, инклудить в во все cpp-шники. Хотя у вас так всё изложено, что не понять не мудрено.
0
|
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 21.10.2019, 22:10 | ||
|
extern для глобальных объектов/переменных. Функции со своими прототипами сами себя обеспечивают. Попробуй без extern сделай как сам говоришь. Прототип ( void foo(); ) в хедер, тело ( void foo() {} ) в цпп.
0
|
||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
||||||
| 21.10.2019, 22:13 | ||||||
|
Folian, справедливости ради, отмечу, что mingw вот так скомпилил
C.h
В общем - ситуация явно не здоровая в таком виде Добавлено через 2 минуты Folian, вижу, ты запутался в цитатах. Про "отсутствие тела"+static - это я говорю про статические функции класса (про оболочку, то есть), а не про голые функции
0
|
||||||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||||||
| 21.10.2019, 22:27 | ||||||
0
|
||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
||
| 21.10.2019, 22:36 | ||
|
0
|
||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|||||||
| 21.10.2019, 22:53 | |||||||
|
Как же ты упёрт, вместо того чтобы попробовать что-то сделать сидишь и строчишь не пойми чего. Домашнее задание: создай пару файлов, 1.h и 1.cpp:
0
|
|||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 21.10.2019, 23:11 | |
|
Folian, конечно понимаю. Я обычно прагму использую, но в данном случае нет разницы.
Я попробовал - на последнем mingw это компилится, однако я точно помню, что были проблемы без extern где-то. Может, старые компиляторы ругались? Но я такую лапшу давно не делаю, сейчас в классы всё завёрнуто, поэтому я не отслеживаю этот момент. Надо какой-нибудь древний проект поднять протестить Да и я ж не против, работает, так работает
1
|
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 21.10.2019, 23:22 | ||
|
Я рад что ты понял, держи стакан
1
|
||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 21.10.2019, 23:26 | |
|
Folian, дык, про объекты и переменные само собой. Я вот сейчас нашёл древний проект, удалил extern у голых функций - скомпилилось. Чудеса
0
|
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|
| 21.10.2019, 23:27 | |
|
О! Да я и сам тебя внезапно понял! Твой extern может быть употреблён, когда функции нет в хедере (а только в каком-то цпп)! Это может быть, но это не повод пихать extern для функции в *.х!
0
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 21.10.2019, 23:29 | |
|
Folian, ну это как бы и заменяет ручное прописывание везде во всех cpp дополнительный extern. Просто включаешь заголовок и всё
0
|
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|
| 21.10.2019, 23:31 | |
|
0
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 21.10.2019, 23:32 | |
|
Folian, свят свят, перед сном такое показывать о_О
0
|
|
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|||
| 21.10.2019, 23:36 | |||
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 22.10.2019, 02:18 | ||
.h файле (что разумно), именно inline - самый правильный подход.
0
|
||
| 22.10.2019, 02:18 | |
|
GRF & DEV CPP query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так? Связывание данных (data binding) & ADO error '80020009' Îøèáêà. /lalala/profile.asp, line 28 Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|