重複の可能性:
実装でヘッダーを再インクルード
私が疑問に思っているのはusing namespace xxx
、グローバル名前空間を汚染しないように、ヘッダー ファイルで使用しないのが一般的であるということです。これはどうなり#includes
ますか?
私が持っているfoo.h
場合foo.cpp
:
//Foo.h
#ifndef FOO_H_
#define FOO_H_
#include <string>
class Foo
{
public:
Foo(std::string * a, std::string * b);
virtual ~Foo();
};
#endif /* FOO_H_ */
//Foo.cpp
#include <string>
#include <Foo.h>
Foo::Foo(std::string * a, std::string * b)
{
// TODO Auto-generated constructor stub
}
Foo::~Foo()
{
// TODO Auto-generated destructor stub
}
本当に#include <string>
両方のファイルで必要ですか?.h または .cpp だけに含めるだけで十分ですか? (両方とも機能することはわかっていますが、何が推奨されますか?)
編集、私の質問に関するもう少し背景情報。
ヘッダー ファイルで特定のクラスを (変数またはメソッド引数として) 使用する場合は、それらをヘッダー ファイルで前方宣言し、ヘッダー ファイル自体のみをソース ファイルに含めます。しかし、クラステンプレートを前方宣言できないため、これはほとんどの STL ライブラリでは機能しませんか?