Директива #pragma once распространяется на один подключаемый файл или на все?
UPDATE:
Понял, она распростаняется на сам файл. Тогда почему, когда я в файле указал #pragma once и пытаюсь его подключить к другим файлам(нескольким) выдаются ошибки линковки:
1>error LNK2005: "void __cdecl logit(class std::basic_string
Ответ
Вы неверно понимаете эту директиву. Она распространяется на файл, в котором она определена.
То есть, ее нужно добавлять в .h файлы (те, которые подключаются с помощью #include) в самый верх. Она "эквивалентна" следующей, довольно популярной конструкции
#ifndef _GUARD_H_
#define _GUARD_H_
//код
#endif
А вот проблема наблюдается потому, что Ваш h файл попадает в много разных cpp файлов. И естественно, линковщик обнаруживает много одинаковых функций и ругается. Лечиться это так. Либо просто добавьте inline к определению функции в самое начало (но это некрасиво, особенно, если функции не маленькие), либо создайте отдельный cpp файл, вынесите туда тело каждой функции, а в h файле оставьте только прототипы. Это правильный, хороший способ. Но если Ваши функции в h файле занимают по одной-две строки, то можно и через inline.
Комментариев нет:
Отправить комментарий