расположение заголовочных файлов в с ++ - PullRequest
0 голосов
/ 06 августа 2011

Я делаю проект для своего колледжа, и тут возникла проблема .. Я знал, что пришло время вернуться сюда.

Есть много файлов (10-12 ... слишком много для меня), и у каждого есть заголовочный файл. я сделал отдельные папки, такие как:

Папка регистрации: RegistersName.h Register.h (* == корреспонденции cpp) * .cpp
Папка базы данных: RegisterDB.h Инструкция DB.h * .cpp
Папка с инструкциями: Instrucion.h * .cpp
Папка компилятора: Compiler.h * .cpp
Папка команд: Command.h * .cpp

Теперь многие из этих заголовочных файлов «видят» друг друга, поэтому я должен их включить.

Должен ли я включить как

В файле Compiler.h

#include "../Database/RegisterDB.h"
#include "../Register/Register.h"
#include "../Register/RegistersName.h"

Я искренне думаю, что это не способ записи. потому что перемещение некоторых файлов тут и там разрушило бы проект. :( пожалуйста, ведите меня.

спасибо за помощь каждый раз.

Ответы [ 4 ]

2 голосов
/ 06 августа 2011

Вы должны определенно пропустить относительную адресацию, используя ..\, потому что определенно добавляет к соединению.

Затем вы можете добавить каталог проекта к пути включения (однако это сделанов вашей системе сборки) и включите как

#include "Database/RegisterDB.h"
#include "Register/Register.h"

, если вы чувствуете, что они являются «подпроектами», которые следует хранить отдельно.

1 голос
/ 06 августа 2011

Каждый ваш включаемый файл должен иметь Включить охрану .Это предотвращает случайное включение файла заголовка более одного раза.

Каждый исходный файл должен включать Все необходимые ему заголовочные файлы.Не предпочитайте включать заголовки посредством включения в другие файлы заголовков, а включайте каждый файл, который необходим в исходном файле, по отдельности, это позволяет избежать фиаско, что если определенный заголовок больше не нужен и удален, то вы застряли с ошибками компиляции, если этот конкретный заголовоквключил некоторые другие заголовочные файлы, которые были необходимы.

Добавьте все пути, по которым вы включаете, в путь включения, чтобы вам не пришлось возиться с явным упоминанием пути при включении.

Если у вас есть циклические зависимости, вы используете Форвардные объявления типов для прохождения.

0 голосов
/ 06 августа 2011

Операторы #include должны быть отсортированы и сгруппированы . Пожалуйста, ознакомьтесь с Руководствами по стилю программирования C ++ и потоком Stackoverflow - Лучшие практики использования заголовочных файлов C ++.

#include "app/Database/RegisterDB.h"
#include "app/Register/Register.h"
#include "app/Register/RegistersName.h"
0 голосов
/ 06 августа 2011

Да, перемещение заголовочных файлов будет означать, что вам придется исправить эти включения.Но если вам нужно включить, вы должны включить ...

Вопрос в том, действительно ли вам нужно включать заголовки в другие заголовки?Иногда вы делаете, например, если класс наследует от другого класса.Но иногда люди включают заголовки в другой заголовок, когда они действительно должны были включать только заголовок в исходный файл.Поэтому убедитесь, что вы не создаете ненужную связь здесь.Например, все ли пользователи класса Compiler должны также использовать материал из класса RegisterDB?Или это деталь реализации, и поэтому должна быть включена только в Compiler.cpp?

...