Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22

Универсальный способ подключения заголовочных файлов, или как мне не ловить цикличное обьявление каждую компиляцию?

17.06.2019, 16:06. Показов 1633. Ответов 9

Студворк — интернет-сервис помощи студентам
Я сейчас на пути создания игры, которая заполонит весь мир - в нее будут играть все, делать бесконечные клоны на мобилки, моя игра побьет рекорды онлайна ПАБГа доты и прочего. От этого меня отделяет всего одна мелочь - заголовочные файлы. А именно - ими вызванные ошибки типа

Error C2061 syntax error: identifier 'Player' TopDownWorld E:\projects\TopDownWorld\Camera.h 21

Дело в том что разные методы раззных классов используют обьекты других классов, как аргументы, или же, некоторые обьекты классов состоят из других обьектов других классов. В таких случаях мне нужно сообщить одному классу про другой, чтобы он знал сколько памяти нужно выделить и бла-бла-бла.
Я начинаю штамповать сотни Includo-в - ловлю цикличное обьявление, потом заменяю их на сотни
class askfjdlk;(предобьявление или как-то там) ловлю еще какую-то дичь, лезу на переполненный стак, там советуют обьявлять ссылки на обьект, это срабатывает но через раз...
Короче.
Мои вопросы к уважаемым вам:
1.Есть ли универсальный способ не мучатся с этим shit(что-то типо засунуть все инклуды в один .h файл и его везде инклудить, плюнуть под кровать и посмотреть под подушку)
if (1. == есть)
Опишите его.
else
Как тогда мне дейвствовать в каждой отдельной ситуации?
Всех кто мне поможет ждет часть акций моей будущей игры, вот увидите это не шутки.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2019, 16:06
Ответы с готовыми решениями:

Организовать проект в виде двух заголовочных и двух программных файлов. Выполнить многофайловую компиляцию
Как это зделать?(( #include "stdafx.h" #include <iostream> #include <conio.h> #include <iomanip> //для манипуляторов вывода ...

Раскритикуйте мой способ избавления от заголовочных файлов
// positive_math.c - операции с массивом целых неотрицательных чисел #ifndef positive_math_interface #define positive_math_interface...

Ошибки подключения заголовочных файлов
Приветствую, во время написания кода возникли ошибки, которые пробовал решить по разному, но не вышло. Файл main: #include...

9
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
17.06.2019, 16:19
А чем Вас не устроил стандартный способ:
C++
1
2
3
4
5
6
#ifndef ИМЯ_ЗАГОЛОВОЧНОГО_ФАЙЛА
#define  ИМЯ_ЗАГОЛОВОЧНОГО_ФАЙЛА
...
// текст файла
....
#endif
0
Злостный нарушитель
 Аватар для Verevkin
10298 / 5721 / 1268
Регистрация: 12.03.2015
Сообщений: 26,494
17.06.2019, 16:39
Цитата Сообщение от KRC Посмотреть сообщение
Я сейчас на пути создания игры, которая заполонит весь мир - в нее будут играть все, делать бесконечные клоны на мобилки, моя игра побьет рекорды онлайна ПАБГа доты и прочего.
Люди, которые пишут массовый софт, не задают на форумах вопросы, а отвечают на них. И модерируют, иногда.
------
Поддерживаю предыдущего ответчика по поводу #ifndef.
0
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22
17.06.2019, 17:23  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
А чем Вас не устроил стандартный способ:
Хорошо, но разве #pragma once не делает тоже самое?

Добавлено через 56 секунд
Цитата Сообщение от Verevkin Посмотреть сообщение
Люди, которые пишут массовый софт, не задают на форумах вопросы, а отвечают на них. И модерируют, иногда.
Ты не прав - я же задаю
0
 Аватар для shelluser
146 / 39 / 26
Регистрация: 11.05.2019
Сообщений: 122
17.06.2019, 17:26
Цитата Сообщение от KRC Посмотреть сообщение
Всех кто мне поможет ждет часть акций моей будущей игры, вот увидите это не шутки.
буду следить
1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
17.06.2019, 17:38
Цитата Сообщение от KRC Посмотреть сообщение
Есть ли универсальный способ не мучатся с этим shit
Пересмотреть архитектуру, книжки умные почитать по паттернам проектирования, может зайдет
0
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22
17.06.2019, 17:44  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Пересмотреть архитектуру, книжки умные почитать по паттернам проектирования, может зайдет
Вот кстати по теме вот этих танцев с с разбиением программы на файлы не видел ни гайдов ни книг ни контента
0
Злостный нарушитель
 Аватар для Verevkin
10298 / 5721 / 1268
Регистрация: 12.03.2015
Сообщений: 26,494
17.06.2019, 18:34
Цитата Сообщение от KRC Посмотреть сообщение
Ты не прав - я же задаю
Держи меня в курсе, чувак.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
17.06.2019, 18:57
Лучший ответ Сообщение было отмечено KRC как решение

Решение

Цитата Сообщение от KRC Посмотреть сообщение
ни книг
Есть книга: Large-Scale C++ Software Design. Эта тема (циклические зависимости) и многие другие темы, связанные с разработкой большого софта разобраны очень подробно. Книга старая, но многое оттуда актуально до сих пор, по крайней мере концептуально (не говоря уж про "азы", которые никогда не поменяются).

ссылочка на амазон

Добавлено через 11 минут
Также очень хорошая книга (есть на русском) "C++. Практический подход к решению проблем программирования".

ссылочка на озон

Цитата Сообщение от KRC Посмотреть сообщение
Есть ли универсальный способ...
Нет. Хотя многие IDE сейчас предлагают типовые шаблоны для распространенных случаев. Принцип: один класс - один *.h файл. Но, разумеется, это не спасет от кривого дизайна.

Цитата Сообщение от KRC Посмотреть сообщение
Как тогда мне дейвствовать в каждой отдельной ситуации?
Набираться опыта постепенно, читать чужой код, писать свой, читать свой, думать головой. Читать книги.
Повторять до наступления просветления.
3
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22
18.06.2019, 10:16  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Набираться опыта постепенно, читать чужой код, писать свой, читать свой, думать головой. Читать книги.
Повторять до наступления просветления.
Так точно, капитан! Спасибо за ссылки на книги. Я напишу вам когда моя игра будет готова в релизу для обсуждения условий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2019, 10:16
Помогаю со студенческими работами здесь

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве...

Как запустить компиляцию файлов из командной строки?
загрузила файлы библиотеки, рекомендуемые в книге Брюса Эккеля и по инструкциям книги пытаюсь выполнить компиляцию по следующей команде ...

Какой программой или как мне ассоциировать сразу несколько типов файлов?
задача такая, есть OpenOffice portable, 3.2.1 Установочную не нашел. Нашел программу openWith но он ассоциирует по одной программе, а мне...

Как посмотреть содержимое заголовочных файлов в Си?
доброго. как посмотреть содержимое заголовочных файлов в си я про #include <intrin.h> те которые включены в проект их видно, а...

Как компилятору указать директорию заголовочных файлов.
Мне надо на Visual Studio 2010 Ultimate. Нужно указать директорию заголовочных файлов DirectX'а.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru