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

Разделение проекта на файлы .cpp где полностью описывается один класс - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 01:39     Разделение проекта на файлы .cpp где полностью описывается один класс #1
Всем привет!
Бьюсь над задачей: есть несколько классов, куча объявленных констант через #define и отдельные функции.
Захотел все это раскидать по разным .cpp файлам.
План такой:
Два хедерных файла, один со всеми библиотеками и инклудами, второй с константами #define.
Отдельные файлы .cpp для функции main, отдельных функций и для каждого класса.
Прочитал про такую штуку как:
C++
1
2
3
#ifndef
#define
#endif
Сделал следующим образом:
В файле main.cpp у меня #ifndef на основной хедерный файл со всеми заголовками #include "HEADERS.h".
В самом "HEADERS.h" у меня через #ifndef прописаны все файлы, на которые я разбил код:
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
28
29
#ifndef CONSTANTS_H
#define CONSTANTS_H
#include "CONSTANTS.h"
#endif
 
#ifndef CLASS_OBJECT_CPP
#define CLASS_OBJECT_CPP
#include "CLASS_OBJECT.cpp"
#endif
 
#ifndef CLASS_DRAW_HERO_CPP
#define CLASS_DRAW_HERO_CPP
#include "CLASS_DRAW_HERO.cpp"
#endif
 
#ifndef CLASS_DRAW_PLATFORMS_CPP
#define CLASS_DRAW_PLATFORMS_CPP
#include "CLASS_DRAW_PLATFORMS.cpp"
#endif
 
#ifndef FUNCTIONS_CPP
#define FUNCTIONS_CPP
#include "FUNCTIONS.cpp"
#endif
 
#ifndef CLASS_MOVING_OBJECTS
#define CLASS_MOVING_OBJECTS
#include "CLASS_MOVING_OBJECTS.cpp"
#endif
В итоге куча ошибок и сплошное расстройство!(((
Работать с гигантскими длинными файлами, выискивая нужную функцию не радует ни разу.
Пожалуйста, подскажите как наиболее удобно разбить такой проект на отдельные файлы!
Я пробовал искать ответы на форуме, но ничего подходящего не нашел...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 01:39     Разделение проекта на файлы .cpp где полностью описывается один класс
Посмотрите здесь:

C++ Вложенный шаблонный класс(разделение на файлы)
C++ Дано описание следующего класса class TPoint ... Как описывается указатель на данный класс
Заголовочные файлы и файлы cpp C++
Где взять учебник, в котором описывается работа с классами C++
Востановить файлы .cpp и .h из проекта с DiskDigger 1.6.0.1571 ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
 Аватар для MastAKK
143 / 134 / 12
Регистрация: 13.10.2012
Сообщений: 585
Записей в блоге: 1
03.06.2014, 02:48     Разделение проекта на файлы .cpp где полностью описывается один класс #2
А если дефайны в самих .срр прописывать?
И что за ошибки? Хоть один пример.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 03:48  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #3
Пробовал по разному: разделял классы на два файла - .cpp и .h.
Пробовал в один .h запихать все дефайны - тоже не получается.
Пробовал в начале каждого файла ifndef прописывать, чтобы его не прогружало два раза - не получается.
Постоянно ошибки, что либо что-то не определено, либо что-то определено несколько раз...
Есть другой способ бить проект на файлы, за исключением #pragma once и #ifndef'ов??
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 04:51     Разделение проекта на файлы .cpp где полностью описывается один класс #4
Цитата Сообщение от Divergence Посмотреть сообщение
Есть другой способ бить проект на файлы, за исключением #pragma once и #ifndef'ов??
Все прототипы в .h файлы (с использованием #ifndef #define #endif), все реализации в .cpp файлы.
Не нужно делать #include для .cpp файлов. Конструкция #ifndef #define #endif (как и все директивы препроцессора) действует в пределах одного файла, поэтому никак не защищает от множественных определений при #include .cpp файлов (или при размещении определений в .h файлах).
Цитата Сообщение от Divergence Посмотреть сообщение
куча объявленных констант через #define
В отдельный .h файл, и подключать, где нужно.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 11:41  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #5
У меня еще такая особенность есть, что два класса используют как член (переменную) класса другой класс. Получается, что у меня один класс в другом находится.
Я не до конца понимаю, что именно мне нужно запихивать в #ifndef: только один #define, или же целое определение класса/функции??
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 12:48     Разделение проекта на файлы .cpp где полностью описывается один класс #6
Цитата Сообщение от Divergence Посмотреть сообщение
Я не до конца понимаю, что именно мне нужно запихивать в #ifndef: только один #define, или же целое определение класса/функции??
Объявление (определение) класса, прототипы (не определения!) функций. Всё это в .h файл, в конструкцию #ifndef #define #endif.
Цитата Сообщение от Divergence Посмотреть сообщение
У меня еще такая особенность есть, что два класса используют как член (переменную) класса другой класс. Получается, что у меня один класс в другом находится.
Тут нужно классы смотреть, чтобы при инклудах .h файлов, с опредлениями классов, не получилось взаимное включение. Если в каком-то классе есть только указатели на другой класс, то, вместо инклуда хедера с этим другим классом, можно сделать форвард-декларацию другого класса, тогда не будет взаимного включения хедеров.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 13:00  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #7
Можно ли использовать прототипы классов, например:
C++
1
class B;
???
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 13:25     Разделение проекта на файлы .cpp где полностью описывается один класс #8
Цитата Сообщение от Divergence Посмотреть сообщение
Можно ли использовать прототипы классов, например:
Это форвард-декларация класса. Смотря где и как. Один из вариантов использования я описал:
Цитата Сообщение от alsav22 Посмотреть сообщение
Если в каком-то классе есть только указатели на другой класс, то, вместо инклуда хедера с этим другим классом, можно сделать форвард-декларацию другого класса,
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 21:41  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #9
Решил проблему следующим образом:
Для каждого класса создал отдельный .h файл, где находится абсолютно все об этом классе.
Создал файл HEADERS.h с подключением всех необходимых хедерных файлов и библиотек (windows.h, fstream т.д.).
У каждого .h файла в самом начале стоит директива #pragma once, затем идет включение .h файла HEADERS.h и любых других необходимых .h файлов. Затем в самом начале файла .cpp, где находится функция main я прописал абсолютно все хедерные файлы и ОНО ЗАРАБОТАЛО! УРА! И теперь с этим намного удобнее работать!!!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 21:56     Разделение проекта на файлы .cpp где полностью описывается один класс #10
Цитата Сообщение от Divergence Посмотреть сообщение
Для каждого класса создал отдельный .h файл, где находится абсолютно все об этом классе.
Абсолютно всё подразумевает и реализации методов? Тогда всё будет хорошо, пока не появится ещё один .cpp файл, где нужно будет использовать эти классы.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 22:04  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Абсолютно всё подразумевает и реализации методов? Тогда всё будет хорошо, пока не появится ещё один .cpp файл, где нужно будет использовать эти классы.
Да, описание класса, затем сразу его методы.
А что придется сделать, если появится еще один .срр файл?
У меня, по задумке, все крутится внутри классов, а они находятся в .h файлах...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 22:36     Разделение проекта на файлы .cpp где полностью описывается один класс #12
Цитата Сообщение от Divergence Посмотреть сообщение
А что придется сделать, если появится еще один .срр файл?
Выносить реализации класса в отдельный .cpp, иначе, при подключении хедера с реализациями ко второму .cpp, будет ошибка множественного определения. Или делать реализации внутри описания класса.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
03.06.2014, 22:47  [ТС]     Разделение проекта на файлы .cpp где полностью описывается один класс #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Выносить реализации класса в отдельный .cpp
У меня так было до этого, но с этим стало невозможно работать. Я тратил больше времени на прокрутку кода, чем на сам кодинг.

Цитата Сообщение от alsav22 Посмотреть сообщение
при подключении хедера с реализациями ко второму .cpp, будет ошибка множественного определения
Печально((( Неужели больше ничего нельзя придумать??((

Цитата Сообщение от alsav22 Посмотреть сообщение
Или делать реализации внутри описания класса.
Не понимаю, как это сможет помочь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 22:58     Разделение проекта на файлы .cpp где полностью описывается один класс
Еще ссылки по теме:

Файлы .cpp и .h C++
C++ Разделение на .cpp и .h
C++ Разделение на h и cpp

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2014, 22:58     Разделение проекта на файлы .cpp где полностью описывается один класс #14
Цитата Сообщение от Divergence Посмотреть сообщение
Не понимаю, как это сможет помочь?
Тогда реализации будут как inline. Это, кстати, ещё один способ избежать ошибки множественных определений: сделать реализации inline.
Yandex
Объявления
03.06.2014, 22:58     Разделение проекта на файлы .cpp где полностью описывается один класс
Ответ Создать тему
Опции темы

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