Несколько структур, определенных в заголовочном файле — я должен переместить их в отдельные файлы h и cpp

Один из моих предыдущих коллег написал огромный заголовочный файл, содержащий около 100 нечетных структур со встроенными определениями функций-членов. Этот структурный файл включен в большинство реализаций классов (cpp-файлы) и заголовочных файлов (не знаю, почему мой коллега не использовал предварительные объявления)

Чтение такого огромного заголовочного файла — это не только кошмар, но и трудности с отслеживанием проблем из-за жалоб компилятора на множественные определения и циклические ссылки. Общий процесс компиляции также очень медленный.

Чтобы исправить многие такие проблемы, я перенес включение этого заголовочного файла из других заголовочных файлов в файлы cpp (где это возможно) и использовал предварительные объявления только соответствующих структур. Тем не менее, я продолжаю получать странные множественные ошибки определения, такие как «фатальная ошибка LNK1169: обнаружен один или несколько кратно определенных символов».

Сейчас я обдумываю, следует ли мне реорганизовать этот заголовочный файл структуры и разделить объявление и определение структуры в отдельных файлах h / cpp для каждой структуры. Хотя это будет болезненным и трудоемким делом без инструментов рефакторинга в Visual Studio, это хороший подход для решения таких проблем?

PS: Этот вопрос связан со следующим вопросом: Несколько классов в файле заголовка против одного файла заголовка на класс

1

Решение

Когда вы сталкиваетесь с таким серьезным рефакторингом, как этот, вы, скорее всего, будете использовать один из следующих подходов: рефакторинг оптом или делать это постепенно.

Преимущество массового выполнения состоит в том, что вы будете проходить код очень быстро (по сравнению с пошаговым), однако, если вы столкнетесь с какой-либо ошибкой, может пройти много времени, прежде чем вы ее исправите.

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

Лично я бы попробовал объединить 2 подхода:

  • Разделить каждый класс, один за другим (сверху вниз) на разные единицы перевода
  • Однако, сохраняя основной включаемый файл, и заменяя все перемещенные, включенные включенными
  • После этого вы можете удалить включения в этот основной заголовочный файл и заменить их на единственные классы.
  • Наконец, удалите основной заголовочный файл

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

2

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

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

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