Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
5 / 5 / 1
Регистрация: 15.12.2015
Сообщений: 51
1

Повторное подключение хэдеров

15.08.2019, 17:48. Показов 1434. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Тяжело объяснить проблему, но я попробую.
Например, в главном исходном файле я подключаю iostream для ввода/вывода. Далее создаю свой хэдер: пишу определение класса, пишу в нём прототипы перегруженных операторов << и >>, для которых опять же подключаю iostream. В .cpp файле для реализации этих операторов я просто подключаю свой хэдер, в который уже включен iostream. Но как быть с главным исходником, где уже подключен iostream? Ведь если я подключу свой хэдер, то получится, что я дважды подключаю iostream.

Выглядит всё как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//main.cpp
#include <iostream>
using namespace std;
#include "myheader.h"
 
int main();
{
     INTEGER i;
     cin >> i;
     cout << i << endl << "Goodbye world!" << endl;
 
     return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
//myheader.h
#include <iostream>
 
class INTEGER
{
     private:
          int value;
 
     public:
          friend istream& operator >> (istream& s, INTEGER& v);
          friend ostream& operator << (ostream& s, INTEGER& v);
}
C++
1
2
3
4
5
6
7
8
9
10
11
//myheader.cpp
#include "myheader.h"
INTEGER::istream& operator >> (istream& s, INTEGER& v)
{
     s >> v.value;
}
 
INTEGER::ostream& operator << (ostream& s, INTEGER& v)
{
    s << v.value;
}
Такая же ситуация может возникнуть и с другими подключаемыми заголовочными файлами. Поэтому вопрос: как правильно подключать хэдеры, чтобы они не дублировались нигде?
Ошибок нет, но всё должно быть красиво и структурировано.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2019, 17:48
Ответы с готовыми решениями:

Повторное подключение. Почему не ограничено автоматически?
Есть разные способы ограничить повторное подключение заголовочных файлов, библиотек. Но неужели...

Подключение двух хэдеров
Необходимо подключить два хэдера, в которых пересекается содержимое и получаем conflicting...

Подключение хэдеров
У меня стоит qt 5.2 minGW на win7 x64. Книжка есть по 4.8, да и другие материалы вижу по 4 версии в...

повторное подключение
у меня две формы.на первой регистрация ползователя.все пользователи забиты в БД.при нажатии на...

4
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
15.08.2019, 17:49 2
Лучший ответ Сообщение было отмечено Марауль как решение

Решение

Чем pragma once не устраивает
1
5 / 5 / 1
Регистрация: 15.12.2015
Сообщений: 51
15.08.2019, 17:54  [ТС] 3
Andrey B, спасибо большое! Ваш ответ помог! Я решил узнать, что такое pragma once, и почти сразу нашёл ответ на свой главный вопрос: https://code-live.ru/forum/cpp/4/ .
Спасибо!!!!!
0
Эксперт C
25947 / 16162 / 3467
Регистрация: 24.12.2010
Сообщений: 35,360
15.08.2019, 18:32 4
Цитата Сообщение от Andrey B Посмотреть сообщение
Чем pragma once не устраивает
А все ли компиляторы ее поддерживают?
Имхо, надежней использовать "сторожей"
inc.h:
C++
1
2
3
4
#if !defined INC_H
#define INC_H
...
#endif
0
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.08.2019, 18:47 5
Байт, из популярных все - это уже обсуждали, но у прагма есть ещё один минус, но что использовать - дело каждого)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2019, 18:47

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Повторное socket подключение
Я открыл страницу один раз. Через пару минут в консоли было несколько логов о коннекте, хотя...

IP камера, повторное подключение
Добрый день, подскажите как лучше сделать, в общем есть камера и она может пропадать, что нужно...

Повторное подключение через WCF
Написал программу, в которой файлы передаются по сети. Создаю подключение к серверу через WCF,...

Повторное подключение к БД (connection string)
Подскажите плиз, как сделать, чтобы при неоткрывшемся соединении (connection not opened) программа...


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

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

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