Компонент сообщает об этом дублирующем символе:
#ifndef testttt
#define testttt
void anything(){
std::cout<<"hellooooooo";
}
#endif
Поскольку он находится внутри защитных ограждений, я бы ожидал, что эта функция будет определена только один раз. Но, видимо, нет.
Я знаю, что могу поставить перед ним слово static
, и тогда он будет работать (что я до сих пор считаю ироничным, так как статический объект должен давать ему внутреннюю связь, но эта функция может использоваться из нескольких файлов cpp).
Итак, я думаю, что мой вопрос из двух частей: 1) Почему включенные охранники не предотвращают множественные определения этой функции, как они делают для других элементов заголовка, и 2) Почему слово static
разрешает это, когда static Предполагалось, чтобы имена не были видимыми в других единицах перевода? Я добавляю его, и на самом деле я могу вызвать эту функцию из любого места, включая этот заголовочный файл.