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

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

Войти
Регистрация
Восстановить пароль
 
TierX
 Аватар для TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
#1

Ошибка ли? (заголовочные файлы) - C++

21.07.2014, 14:54. Просмотров 228. Ответов 9
Метки нет (Все метки)

так кхм какбы понятнее спросить...
вобщем если я пишу програму восновном из класов и она у меня имеет вид:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Filename: inputclass.h  <<<< 1
#ifndef _INPUTCLASS_H_
#define _INPUTCLASS_H_
////////////////////////////////////////////////////////////////////////////////
// Class name: InputClass
//==================================================//
class InputClass
{
public:
    InputClass();
    InputClass(const InputClass&);
    ~InputClass();
 
    void Initialize();
           bool m_keys[256];
};
#endif
______________________________________________
// Filename: inputclass.cpp  <<<< 2
////////////////////////////////////////////////////////////////////////////////
#include "inputclass.h"
 
InputClass::InputClass(){}
InputClass::InputClass(const InputClass& other){}
InputClass::~InputClass(){}
 
void InputClass::Initialize(){/*---*/}

Типо все ок да. Но вот если так :
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Filename: inputclass.h  <<<< 1
#ifndef _INPUTCLASS_H_
#define _INPUTCLASS_H_
////////////////////////////////////////////////////////////////////////////////
// Class name: InputClass
//==================================================//
 
class InputClass
{
public:
    InputClass();
    InputClass(const InputClass&);
    ~InputClass();
 
    void Initialize();
 
    bool m_keys[256];
};
// <<<< обьеденили в 1 фаил
InputClass::InputClass(){}
InputClass::InputClass(const InputClass& other){}
InputClass::~InputClass(){}
 
void InputClass::Initialize(){/*---*/}
#endif

Кроме "Омг это быдлокод фууу так никто не делает." Что измениться?
Меня просто ужасно бесит писать програму где приходится прыгать по реализации и хедеру 24/7.
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 14:54     Ошибка ли? (заголовочные файлы)
Посмотрите здесь:

C++ Заголовочные файлы и прототипы
Заголовочные файлы C++
C++ Заголовочные файлы
g++ Заголовочные файлы C++
классы и заголовочные файлы C++
C++ Заголовочные файлы
Заголовочные файлы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:01     Ошибка ли? (заголовочные файлы) #2
Подключи свой заголовочный файл в двух сорцах и попробуй собрать их в одну программу.
TierX
 Аватар для TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:09  [ТС]     Ошибка ли? (заголовочные файлы) #3
сорцах?
сколько раз и где бы я его не включал програма - работает

Добавлено через 6 минут
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Посути препроцесорные гварды не дадут двойное определение класов даже для мультвключения.
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2014, 15:11     Ошибка ли? (заголовочные файлы) #4
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
При подключении хедера с определениями (ваш объединённый) к нескольким .cpp? Будет ошибка линкера: множественные определения.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:11     Ошибка ли? (заголовочные файлы) #5
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
Это неправда.
Цитата Сообщение от TierX Посмотреть сообщение
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Я тебе другой кейс сказал. Пара, сорцов юзающие твой заголовочный файл, и собирающиеся потом вместе.
TierX
 Аватар для TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:20  [ТС]     Ошибка ли? (заголовочные файлы) #6
а если будет только 1 срр? как оно и есть у меня :

main.cpp
include"one.h"
_______
one.h
include"two.h"
include"another.h"
______
etc
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:29     Ошибка ли? (заголовочные файлы) #7
Цитата Сообщение от TierX Посмотреть сообщение
а если будет только 1 срр?
Если бы, да кабы. А если кто-то захочет добавить новый код в отдельный файл и заиспользовать твой хидер там? Писать сразу по-нормальному сложно?
Ты спрашивал:
Цитата Сообщение от TierX Посмотреть сообщение
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
Ответ ты получил.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
21.07.2014, 15:42     Ошибка ли? (заголовочные файлы) #8
Если прям критично использовать один хедер (ради тренировок как бы абсолютно пофиг), можно использовать такой подход. Но с нормальным .cpp файлом естесн лучше.

Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Filename: inputclass.h  <<<< 1
#ifndef _INPUTCLASS_H_
#define _INPUTCLASS_H_
////////////////////////////////////////////////////////////////////////////////
// Class name: InputClass
//==================================================//
 
class InputClass
{
public:
    InputClass();
    InputClass(const InputClass&);
    ~InputClass();
 
    void Initialize();
 
    bool m_keys[256];
};
// <<<< обьеденили в 1 фаил
inline InputClass::InputClass(){}
inline InputClass::InputClass(const InputClass& other){}
inline InputClass::~InputClass(){}
 
inline void InputClass::Initialize(){/*---*/}
#endif
TierX
 Аватар для TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:46  [ТС]     Ошибка ли? (заголовочные файлы) #9
Ну вопрос был задан без предвидинья его развития.
И да, сложно. Мне легче все накатать так, а потом раскинуть уж по отдельным файлам реализации. Уж эот будет для меня куда быстрее.
И всетаки вопрос теперь в другом влияет ли это на время компиляции так как 2 сорса я делать и не соберался. Если влияет то , это уже аргумент...
Я просто не знаю перекомпелируется ли отдельные сорсы при изменении только одного из них. Или только тот который был изменен. Тем самым ускоряя процес.
А уж как у меня я вобще не знаю.
Создаються ли обьекты из хедеров? Если да то такойже вопрос (как и про сорсы) про перекомпиляцию.
Если нет то выходит у меня получаться по сути один большой обект (типо одновайловой программы) которая полностью перекомпилируеться при любом изменении хедера или сорса.
Поэтому ответа я пока не получил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 15:50     Ошибка ли? (заголовочные файлы)
Еще ссылки по теме:

Заголовочные файлы (.h) C++
заголовочные файлы C++
Заголовочные файлы .h и .cpp C++
C++ Заголовочные файлы
C++ Заголовочные файлы - C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
21.07.2014, 15:50     Ошибка ли? (заголовочные файлы) #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
TierX, Какая-то мешанина... Да, время компиляции замедляется, т.к. в хедере получается больше строк. Да, любое изменение кода данного хедера влечет за собой перекомпиляцию всех файлов, в которые включен этот.
Yandex
Объявления
21.07.2014, 15:50     Ошибка ли? (заголовочные файлы)
Ответ Создать тему
Опции темы

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