Как мне предотвратить включение поломки

У меня есть код, который содержит огромное количество файлов cpp / header. Моя проблема сейчас в том, что поскольку многие включают друг друга, я иногда попадаю в ситуацию, когда мой код не компилируется, если я не переупорядочиваю #include директивы в случайных файлах, что теперь необходимо в основном при создании любого другого заголовочного файла.

Это действительно очень раздражает; есть ли совет, как я должен написать свой код C ++, чтобы предотвратить осложнения с #include? Я бы предпочел разделить мой исходный код на максимально возможное количество файлов, чтобы облегчить сотрудничество с другими программистами (использующими git или svn) (больше файлов == меньшее количество конфликтов редактирования).

Одна из вещей, которая мне сейчас помогает, это предварительное объявление, когда я объявляю классы из других заголовков в другие файлы. Это помогает иногда, но не решает все проблемы; иногда мне просто нужно изменить порядок #includes в случайных заголовочных файлах или объединить несколько файлов.

0

Решение

Не панацея, но следующее руководство мне очень помогает.

Предполагая, что ваш код состоит из файлов, таких как MyClassXyz.cpp с соответствующими MyClassXyz.hодин класс на исходный файл, каждый cpp-файл должен включать соответствующий заголовочный файл первый. То есть, MyClassXyz.cpp должен начните со следующей строки:

// (possibly after comments)
#include "MyClassXyz.h"

Это гарантирует, что MyClassXyz.h включает в себя все файлы заголовков (или предварительные объявления), необходимые для его компиляции.

Я часто вижу код, который использует противоположное соглашение (#includeсначала используются самые общие файлы заголовков), например, MyClassXyz.cpp начинается с

#include <vector>
#include <iosfwd>
#include "blah.h"#include "mytypes.h"#include "MyClassXyz.h"

А также MyClassXyz.h «идет прямо в точку», используя материал, определенный в дополнительных заголовках:

#pragma once
// "#include <vector>" missing - a hidden error!
// "#include <iosfwd>" missing - a hidden error!
class MyClassXyz
{
std::vector<int> v;
friend std::ostream& operator<<(...);
...
}

Хотя это компилируется нормально, при попытке использования класса возникают колоссальные головные боли описываемого вами типа. MyClassXyz в каком-то другом исходном файле.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]