Я довольно новичок в C ++, но, насколько я понимаю, оператор #include, по сути, просто сбросит содержимое файла #included в расположение этого оператора. Это означает, что если в моем заголовочном файле есть несколько операторов '#include' и 'using', мой файл реализации может просто #include заголовочный файл, и компилятор не будет возражать, если я не повторю другие операторы .
А как же люди?
Моя главная проблема заключается в том, что если я не повторю операторы '#include', 'using', а также 'typedef' (теперь, когда я об этом думаю), он забирает эту информацию из файла, в котором он находится. используется, что может привести к путанице.
Я сейчас работаю над небольшими проектами, когда это не вызовет особых проблем, но я могу себе представить, что в более крупных проектах, где над ними работает больше людей, это может стать серьезной проблемой.
Ниже приведен пример:
ОБНОВЛЕНИЕ: мои прототипы функций для 'Unit' имеют строку, ostream и StringSet среди своих возвращаемых типов и параметров - я не включаю в файл заголовка ничего, что используется только в файле реализации. 1013 *
//Unit.h
#include <string>
#include <ostream>
#include "StringSet.h"
using std::string;
using std::ostream;
class Unit {
public:
//public members with string, ostream and StringSet
//in their return values/parameter lists
private:
//private members
//unrelated side-question: should private members
//even be included in the header file?
} ;
//Unit.cpp
#include "Unit.h"
//The following are all redundant from a compiler perspective:
#include <string>
#include <ostream>
#include "StringSet.h"
using std::string;
using std::ostream;
//implementation goes here