Есть понимание что у меня проблемы с инклудами. В данный момент есть программа с 4мя формами и кучей классов. Все классы я перечислил в отдельном .h файле и в формах ссылаюсь на него #include "includes.h" Проблема в том что со временем в программе накапливались классы и формы и includes.h рос. Классы стали пересекаться, один использует другой а в другом вызывается третий. Программа работает, но пришлось вставлять #include "includes.h" уже в .h файл каждой формы, потому что в какой то момент .h файл форм перестал видеть данный инклуд в .cpp файле формы. В результате классы компилируются по 10 раз для каждого инклуда, и в результате компиляция занимает достаточно много времени. Подскажите пожалуйста, как мне прописать все инклуды правильно?
Можно и
#pragma once
а можно обернуть весь .h файл в
#ifndef INCLUDES_H
#define INCLUDES_H
// все содержимое
#endif // INCLUDES_H
Второй вариант в данном случае так же хорош, а в целом - лучше, так как намного более распространен.
И все-таки действительно лучше определиться, кому какой класс нужен, и соответственно указывать includ'ы
Подскажите пожалуйста, как мне прописать все инклуды правильно?
Перво-наперво, как указали в удаленном сообщении - нужно использовать include-guard
- методику, желательно в виде #pragma once
. Это более современный способ. И это даст возможность однократного включения заголовков.
Второй момент - разбор с "бизнес-логикой". Когда классы работают "все-со-всеми", это заведомо глючный салат. Нужно определится "кто с кем взаимодействует". Если есть перекрестные взаимодействия - используйте упреждающие объявления. В принципе, одно из решений - упреждающие объявления и выносить их нужно отдельно, пусть в global_include.h
. Например:
#pragma once
class ClassDrinkVodka;
class ClassRunToMaidan;
class ClassJumpForPeremoga;
class ClassZradaCry;
Тут последовательность взаимодействия заранее не определена. И именно этот файл можно включать глобально. А заголовки-реализации - по необходимости. Системы сборки уже сами будут смотреть за ситуацией, что изменено и что требуется перекопилировать.
Но лучше всего на один класс - одну пару (*.h
и *.cpp
) файлов. Несколько классов в файле оправдано только в том случае, если решается крайне локальный функционал.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я собираюсь научиться разрабатывать приложения под AndroidЯ знаю, что приложения под Android разрабатываются на java, но также можно и на С++
Не получается грамотно оформить запрос, функция принимает строку ("mysql("INSERT INTO history(path, date) VALUES ('" +ss+"','" + t + "')");") типа char, но в ней нельзя суммировать...
Изучения языка программирования начинается с консольных программМогут ли консольные программы применять в реальной жизни? Какого возможности...
Пытаюсь скомпилировать программу на С++, которая хочет прочесть данные о портах в реестреЗнаток С++ я небольшой, я по Java, а это JNI класс, для...