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

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

Восстановить пароль Регистрация
 
TierX
 Аватар для TierX
19 / 19 / 0
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 14:54     Ошибка ли? (заголовочные файлы) #1
так кхм какбы понятнее спросить...
вобщем если я пишу програму восновном из класов и она у меня имеет вид:

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

Добавлено через 6 минут
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Посути препроцесорные гварды не дадут двойное определение класов даже для мультвключения.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2014, 15:11     Ошибка ли? (заголовочные файлы) #4
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
При подключении хедера с определениями (ваш объединённый) к нескольким .cpp? Будет ошибка линкера: множественные определения.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:11     Ошибка ли? (заголовочные файлы) #5
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
Это неправда.
Цитата Сообщение от TierX Посмотреть сообщение
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Я тебе другой кейс сказал. Пара, сорцов юзающие твой заголовочный файл, и собирающиеся потом вместе.
TierX
 Аватар для TierX
19 / 19 / 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
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:29     Ошибка ли? (заголовочные файлы) #7
Цитата Сообщение от TierX Посмотреть сообщение
а если будет только 1 срр?
Если бы, да кабы. А если кто-то захочет добавить новый код в отдельный файл и заиспользовать твой хидер там? Писать сразу по-нормальному сложно?
Ты спрашивал:
Цитата Сообщение от TierX Посмотреть сообщение
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
Ответ ты получил.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
19 / 19 / 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++
C++ Заголовочные файлы

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

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

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