Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TierX
20 / 20 / 1
Регистрация: 28.02.2014
Сообщений: 138
#1

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

21.07.2014, 14:54. Просмотров 265. Ответов 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.
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
http://www.cyberforum.ru/cpp-beginners/thread1502760.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 14:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка ли? (заголовочные файлы) (C++):

Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы?
Приветствую всех! Столкнулся с тем, что решая задачи по книге Лафоре про...

заголовочные файлы
напишите пожалуйста,что делают заголов.файлы &lt;io.h&gt; и &lt;direct.h&gt; Добавлено...

Заголовочные файлы
Всем добрый день! Пытался найти информацию по созданию заголовочных файлов, да...

Заголовочные файлы
#ifndef _MYCLASS_H #define _MYCLASS_H class myclass{//Описание класса};...

Заголовочные файлы *.h
Доброго времени суток! Как понят следующее: В заголовочных файлах, в целях...

9
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
21.07.2014, 15:01 #2
Подключи свой заголовочный файл в двух сорцах и попробуй собрать их в одну программу.
0
TierX
20 / 20 / 1
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:09  [ТС] #3
сорцах?
сколько раз и где бы я его не включал програма - работает

Добавлено через 6 минут
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Посути препроцесорные гварды не дадут двойное определение класов даже для мультвключения.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2014, 15:11 #4
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
При подключении хедера с определениями (ваш объединённый) к нескольким .cpp? Будет ошибка линкера: множественные определения.
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
21.07.2014, 15:11 #5
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
Это неправда.
Цитата Сообщение от TierX Посмотреть сообщение
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Я тебе другой кейс сказал. Пара, сорцов юзающие твой заголовочный файл, и собирающиеся потом вместе.
0
TierX
20 / 20 / 1
Регистрация: 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
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
21.07.2014, 15:29 #7
Цитата Сообщение от TierX Посмотреть сообщение
а если будет только 1 срр?
Если бы, да кабы. А если кто-то захочет добавить новый код в отдельный файл и заиспользовать твой хидер там? Писать сразу по-нормальному сложно?
Ты спрашивал:
Цитата Сообщение от TierX Посмотреть сообщение
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
Ответ ты получил.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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
0
TierX
20 / 20 / 1
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:46  [ТС] #9
Ну вопрос был задан без предвидинья его развития.
И да, сложно. Мне легче все накатать так, а потом раскинуть уж по отдельным файлам реализации. Уж эот будет для меня куда быстрее.
И всетаки вопрос теперь в другом влияет ли это на время компиляции так как 2 сорса я делать и не соберался. Если влияет то , это уже аргумент...
Я просто не знаю перекомпелируется ли отдельные сорсы при изменении только одного из них. Или только тот который был изменен. Тем самым ускоряя процес.
А уж как у меня я вобще не знаю.
Создаються ли обьекты из хедеров? Если да то такойже вопрос (как и про сорсы) про перекомпиляцию.
Если нет то выходит у меня получаться по сути один большой обект (типо одновайловой программы) которая полностью перекомпилируеться при любом изменении хедера или сорса.
Поэтому ответа я пока не получил.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
21.07.2014, 15:50 #10
Лучший ответ Сообщение было отмечено TierX как решение

Решение

TierX, Какая-то мешанина... Да, время компиляции замедляется, т.к. в хедере получается больше строк. Да, любое изменение кода данного хедера влечет за собой перекомпиляцию всех файлов, в которые включен этот.
1
21.07.2014, 15:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 15:50
Привет! Вот еще темы с решениями:

заголовочные файлы в с++
я вот не могу понять, их обязательно делать в своих программах? В том смысле,...

Заголовочные файлы
Где в Visual studio находится папка с заголовочными файлами, такие как...

Заголовочные файлы
Подскажите, во время компоновки, в итоге, &quot;присоединяются&quot; к экзешнику все...

Заголовочные файлы
Компилятор выдает ошибку на запись: #include &lt;iostream.h&gt; - &quot;не удается открыть...


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

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

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