2013-12-11 2 views
1

У меня есть код, который использует std :: string в файле с именем executor.cpp. В соответствующем файле заголовка executor.h включает #include <string>. Однако, бег cpplint на executor.cpp дает мне сообщение, которое говорит: -Cpplint просит добавить файл заголовка

dec-session/executor.cpp:15: Add #include <string> for string [build/include_what_you_use] [4]

Что я делаю неправильно? Должен ли я включать его в executor.h?

ответ

0

Отредактировано для справки. Это ложный позитив, который можно игнорировать.

Как правило, вы должны включать в executor.cpp и просто пересылать классы (class Thing;) в executor.h.

Гипотетически, хотя если бы вы создали другую версию класса Thing, то все, что включает в себя executor.h, в настоящее время необходимо перекомпилировать. Перемещая include в cpp, вам нужно будет только перекомпилировать executor.cpp и повторно связать.

+1

Я не думаю, что это хорошая идея, чтобы направить объявление std :: string –

+0

Справедливая точка. Я отредактирую, чтобы говорить в общих чертах, поскольку это ложный позитив. – splrs

3

Если вы используете std :: string где-нибудь в заголовке (например, имеете объявление функции с std :: string как один из параметров), тогда просто игнорируйте предупреждение. Если возможно, отфильтруйте его для этого конкретного случая.

Однако не игнорируйте другие предупреждения, в которых предлагается переслать объявление. Не считая заголовков в другом заголовке, это хорошо, поскольку он уменьшает количество файлов, которые необходимо перестроить при изменении чего-либо в заголовке.