У меня есть код, который использует std :: string в файле с именем executor.cpp. В соответствующий заголовочный файл executor.h я включаю #include <string>
, Тем не менее, запуск cpplint на executor.cpp дает мне сообщение, которое говорит:
dec-session/executor.cpp:15: Add #include <string> for string [build/include_what_you_use] [4]
Что я делаю неправильно? Должен ли я включить его в executor.h?
Если вы используете std :: string где-то в заголовке (например, у вас есть объявление функции с std :: string в качестве одного из параметров), просто проигнорируйте предупреждение. Если возможно, отфильтруйте его для этого конкретного случая.
Тем не менее, не игнорируйте другие предупреждения, когда он предлагает пересылать объявления. Хорошо не включать заголовки в другой заголовок, так как это уменьшает количество файлов, которые необходимо перестроить при изменении чего-либо в заголовке.
Отредактировано, чтобы учесть комментарий ниже. Это ложный позитив, который вы можете игнорировать.
Как правило, вы должны включить в executor.cpp и просто объявить классы вперед (class Thing;
) в executor.h.
Гипотетически, хотя, если вы должны были произвести другую версию Thing
class, тогда все, что включает executor.h, в настоящее время должно быть перекомпилировано. Перемещая include в cpp, вам нужно будет только перекомпилировать executor.cpp и повторно связать.