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

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

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

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

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

Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними - C++
Всем добрый вечер!) Относительно недавно стал изучать c/c++, хочу полюбопытствовать ,так как появился вопрос. Почему при объявлении...

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

заголовочные файлы - C++
За мое небольшое время знакомство с программированием в с++ накопилось немного вопросов с работой заголовочных файлов: 1 Почему в имени...

заголовочные файлы в с++ - C++
я вот не могу понять, их обязательно делать в своих программах? В том смысле, что бы код был, так сказать &quot;правильным, хорошим&quot;. Хотел...

Заголовочные файлы - C++
#ifndef _MYCLASS_H #define _MYCLASS_H class myclass{//Описание класса}; #endif Сказано, что заголовочные файлы обычно включают...

Заголовочные файлы (.h) - C++
Доброго времени суток господа! Озадачился вопросом по поводу заголовочных файлов. Но подробного, или понятного мне ответа так и не нашёл....

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

Добавлено через 6 минут
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Посути препроцесорные гварды не дадут двойное определение класов даже для мультвключения.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2014, 15:11 #4
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
При подключении хедера с определениями (ваш объединённый) к нескольким .cpp? Будет ошибка линкера: множественные определения.
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:11 #5
Цитата Сообщение от TierX Посмотреть сообщение
сколько раз и где бы я его не включал програма - работает
Это неправда.
Цитата Сообщение от TierX Посмотреть сообщение
у меня только 1 фаил main.cpp включающий дерево вот таких как выше каждый для своего класа.
Я тебе другой кейс сказал. Пара, сорцов юзающие твой заголовочный файл, и собирающиеся потом вместе.
0
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
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.07.2014, 15:29 #7
Цитата Сообщение от TierX Посмотреть сообщение
а если будет только 1 срр?
Если бы, да кабы. А если кто-то захочет добавить новый код в отдельный файл и заиспользовать твой хидер там? Писать сразу по-нормальному сложно?
Ты спрашивал:
Цитата Сообщение от TierX Посмотреть сообщение
Влияет ли это на время компиляции или возникновению каких либо ошибок в дальнейшем?
Ответ ты получил.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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 / 0
Регистрация: 28.02.2014
Сообщений: 138
21.07.2014, 15:46  [ТС] #9
Ну вопрос был задан без предвидинья его развития.
И да, сложно. Мне легче все накатать так, а потом раскинуть уж по отдельным файлам реализации. Уж эот будет для меня куда быстрее.
И всетаки вопрос теперь в другом влияет ли это на время компиляции так как 2 сорса я делать и не соберался. Если влияет то , это уже аргумент...
Я просто не знаю перекомпелируется ли отдельные сорсы при изменении только одного из них. Или только тот который был изменен. Тем самым ускоряя процес.
А уж как у меня я вобще не знаю.
Создаються ли обьекты из хедеров? Если да то такойже вопрос (как и про сорсы) про перекомпиляцию.
Если нет то выходит у меня получаться по сути один большой обект (типо одновайловой программы) которая полностью перекомпилируеться при любом изменении хедера или сорса.
Поэтому ответа я пока не получил.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.07.2014, 15:50 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
TierX, Какая-то мешанина... Да, время компиляции замедляется, т.к. в хедере получается больше строк. Да, любое изменение кода данного хедера влечет за собой перекомпиляцию всех файлов, в которые включен этот.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 15:50
Привет! Вот еще темы с ответами:

g++ Заголовочные файлы - C++
Значит есть у меня файлик main.cpp к нему инклудиться #include &quot;Event.h&quot; .В этом хидере название функции void event_loop(); .Так же этот...

Заголовочные файлы - C++ - C++
Здравствуйте уважаемые пользователи! написал код программы в 3 файлах. При компилировании возникает следующая ошибка: ...

Заголовочные файлы - C++
Здравствуйте ув. Пользователи, У меня такой вопрос: Есть ли хорошие книги по заголовочным файла как правильно ими пользоваться... Просто...

Заголовочные файлы - C++
Подключил два заголовочных файла, при компиляции пишет, что не знает имени функции Header.h #pragma once float F1(float* ar1,...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
21.07.2014, 15:50
Ответ Создать тему
Опции темы

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