Этого можно избежать, используя либо прагма-охранники, либо #pragma once
(последний, если ваш компилятор поддерживает это).
Чтобы использовать прагма-охранники, просто сделайте следующее:
#ifndef SOME_IDENTIFIER
#define SOME_IDENTIFIER
// ... code ...
#endif
MakeОбязательно измените SOME_IDENTIFIER
для каждого заголовочного файла.Обычно люди делают это NAME_OF_HEADER_H
;убедитесь, что вы изменили оба экземпляра идентификатора, если вы изменили его.
Также, если вы сделаете это, убедитесь, что все #include
s, которые вы делаете, являются внутри защитников прагмы.
Если вы просто хотите использовать #pragma once
и ваш компилятор поддерживает его, вам просто нужно добавить
#pragma once
в начало вашего заголовочного файла.
В другой заметке,рассмотрите возможность перемещения определения функций functionA
и functionB
в их собственные файлы .cpp и сохраните только прототип в файлах .h, чтобы избежать ошибок компоновщика.