Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98

Про добавление заголовочных файлов в заголовочных файлах

11.02.2017, 13:01. Показов 1725. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве include, что он просто подставляет содержимое файла на свое место), достаточно один раз всего указать используемый хидер в самом первом #include "My_lasss_name.h", или надо в каждом .h-файле прописывать, какие файлы он использует. Просто, если в каждом своем .h-файле указывать(по необходимости, конечно) какой нибудь, допустим, iostream, то при подготовке к компиляции в исходном тексте может оказаться дофига похожих кусков кода! миллион раз проверял, что если файл1 использует iostream и файл2, то файл2.h то ругается, то не ругается, что в нем нету iiostream, хотя он использует функции ввода-вывода. вот сейчас я даже убрал все иостримы и веравно, любой файл знает про cout!

Как обЪяснить эту неоднозначность? И как вообще поступать, при создании h-файлов чтоб сэкономить нервы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2017, 13:01
Ответы с готовыми решениями:

Массивы в заголовочных файлах
в заголовочном файле в описании класса пишу: int _const_iMas = {0x63,0x7c,0x78,0x79}; В итоге компилятор подчёркивает знак '='...

О стандартных заголовочных файлах
Не знаю в какую категорию отнести данное нубство, но все же: Часто использую некоторые возможности/функции для которых не делал...

Константы в заголовочных файлах
declare.h #pragma once extern const size_t rows; extern const size_t cols; double initMatrixInput(double matrix);

6
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.02.2017, 13:41
Цитата Сообщение от Maks53 Посмотреть сообщение
И как вообще поступать, при создании h-файлов чтоб сэкономить нервы?
Библиотечные .h файлы всегда защищены от множественных включений, #pragma once или конструкцией:
C++
1
2
3
4
#ifndef _B_H
#define _B_H
//...
#endif
В своих .h файлах следует делать тоже самое, и подключать везде, где используется что-то из них, препроцессор не даст подключать лишнее.
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.02.2017, 13:44
Для того, чтобы не дублировался код, в C++ существует специальный костыль:
C++
1
2
3
4
5
6
#ifndef FILE_H
#define FILE_H
 
// your code
 
#endif FILE_H
И препроцессор не будет включать файл дважды.
1
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98
11.02.2017, 14:01  [ТС]
nd2, Т.е как я понял, достаточно одного #pragma once, который сам автоматически в MSV, и можно в каждом своем файле добавлять сколь угодно файлов добавленных ранее в предыдущих файлах? а добавится только самое первое включение?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.02.2017, 14:05
Да, если речь идёт об одной единице трансляции (грубо говря, об одном файле с включениями, который обрабатывает препроцессор).
1
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
11.02.2017, 14:07
Maks53, в общем да. Но не обязательно добалять прям все хедеры. Например есть hed1.h, hed2.h и в main.cpp они используются. Если в hed2.h уже есть включения hed1.h то в main не обязательно добавлять оба, можно обойтись одним hed2.h
1
187 / 54 / 19
Регистрация: 23.12.2016
Сообщений: 167
11.02.2017, 21:01
Прекомпилированные заголовки включить. И все инклюды библиотек один раз включать в stdafx.h, а он автоматически включается во все вновь создаваемые классы(правда это от настроек зависит) - это если используете Visual Studio. Очень удобно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2017, 21:01
Помогаю со студенческими работами здесь

Линковка, реализация в заголовочных файлах
Ситуация следующая. Представим себет хедер, который содержит некоторый функционал и должен использоваться в нескольких проектах. Причем ...

Определение переменных в заголовочных файлах
Здорова! Определил переменную в заголовочном фале от так #pragma once #ifndef _imya_zagol_fayla #define _imya_zagol_fayla ...

Расположение определения функций в заголовочных файлах
grizlik78, Часто вижу что приватную секцию указывают внизу, интересно, зачем? Вроде удобнее расположить приватные члены класса в самом...

Статические свойства структур в заголовочных файлах
Всем привет. Не могу найти в интернете инфу о том, как ведут себя статические свойства структур определённых в заголовочных файлах и...

Странные объявления функций в заголовочных файлах
Пытаюсь потихоньку разобраться в C++. Когда читаешь теорию, почти все понятно, но когда лезешь в реальный код, возникает много вопросов. По...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru