2016-04-06 13 views
-4

オンA.h私は#includeに何かを使用する必要はありません。奇妙なヘッダC++

他のヘッダーのB.hには、vectorusing namespace stdを含める必要があります。このヘッダーはリンクされていません。ファイルに問題があるようです。 A.hの内容を(問題なく)B.hにコピーすると、stringは型名ではなく、同じ内容がA.hだったときにコンパイラは何も書かれていませんが、vectorはテンプレートではないというコンパイラエラーが発生します。私はVisual StudioでC++をコーディングしています。何が起こっている?

+0

私はなぜdownvoteを尋ねるかもしれませんか? – user859385

+5

[mcve]または[SSCCE(ショート、自己完結型、正しい例)](http://sscce.org)で**あなたの質問を**編集してください。また、ヘッダファイルに 'using namespace std;'を使わないでください。さらに読む:[なぜC++の "namespace std"を使うのが悪い習慣と考えられるのですか?](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-practice ) – NathanOliver

+0

ええ、私は使用しませんでした。私は言っています。コンパイラが私に問題を与えている – user859385

答えて

1

ヘッダーファイルの最初の数行のうち、#include <string>#include <vector>が必要です。そして、あなたのプログラムやヘッダファイルの中のこれらの型を参照するときは、std::stringstd::vectorを参照することをお勧めします。そのような修飾された参照を使用すると、@ NathanOliverが指摘したように、using namespace stdの代わりになります。

+0

IMHO、ヘッダファイルはヘッダーファイル*中のシンボルを解決するためにヘッダファイル*のみをインクルードすべきです。ソースファイルに '#include'を使って、ソースファイルのシンボルを解決してください。 –

+0

@ThomasMatthews私は同意します。私の答えは、問題のヘッダファイルがトップ 'string'と' vector'のオブジェクトを宣言したというコンテキストを想定していたと思います。 – Logicrat