2011-10-28 14 views
2

私はgcc 4.6をC++ 0xモードで使用しています。私は、ベクトルや他のSTLコンテナを使用しても、関連するヘッダファイルを含まないと、コンパイルエラーが発生しないようです。これは設計によるものでしたか?好ましい方法は何ですか?なぜgcc 4.6にSTLヘッダーを含める必要はありませんか?

私はいつも明示的にstd名前空間を指定します...しかし、私は常に、名前空間が指定されていてもヘッダーが含まれていなければならないと考えました。

これはヘッダーを含めることをお勧めします。これは、コンパイラの助けを借りずに100%時間を確保することが疑わしいからです。

+3

おそらく、他のヘッダーを介して間接的にそれらを含めることになります。 –

+0

プログラムに含まれているヘッダーを確認してください。これらのヘッダーのいずれかにSTLヘッダーを含める必要があります。 –

+0

ああそうですが、コードを適切に保つために推奨されるのは何ですか? STLヘッダーを他のヘッダーに含めることを避けることは必ずしも可能ではありません(インライン関数など) – daj

答えて

3

コードに必要なすべての標準ヘッダーを常に含める必要があります。

残念ながら、標準ヘッダーには他の標準ヘッダーを含めることができます。その場合、正しいヘッダーを含めずに何かを使用することができます。それに頼ることはできません。異なるライブラリ実装に変更した場合、インクルードを修正する必要があるかもしれません。

あなたの含めることを確実にするための簡単な方法はありません。最も簡単なオプションは、あなたのコードは、あなたが興味を持っているすべてのライブラリ実装でコンパイルすることをテストすることです。

3

(すなわちあなたのケースでg++に)GCCのプリントすべてのヘッダーを作ることが含めているGCCに与えられたオプション-H 。ファイルがどのように含まれているか(つまり、他のヘッダーから)を見つけるのに役立ちます。そして私はGCCが魔法のようにいくつかのstdC++ヘッダーを含んでいるとは思わない。

関連する問題