Страж заголовка в C++
Один и тот же .h может подключиться в файл дважды.
Если main.cpp включает widget.h, а тот тянет
widget.h снова, компилятор увидит двойное объявление
класса или функции. Страж заголовка - связка
#ifndef, #define и #endif, которая
пропускает текст заголовка только при первом включении.
Имя после #define обычно строят из имени файла,
например WIDGET_H для widget.h. Оборачиваем
объявление функции tick:
#ifndef TICK_H
#define TICK_H
void tick();
#endif
При первом #include "tick.h" имя TICK_H
еще не задано, и текст до #endif попадает в файл.
При втором включении имя уже есть, и текст пропускается.
Реализацию по-прежнему держим в tick.cpp:
#include <iostream>
#include "tick.h"
void tick() {
std::cout << "tick\n";
}
Оберните свой заголовок ping.h стражем
PING_H.
Добавьте страж LINE_H в заголовок line
и подключите его два раза подряд в main.cpp -
сборка должна пройти без ошибки повторного объявления.