2016-05-17 5 views
0

に名前を付けていない私は、この2分離クラスを持っていると私は、このコンパイラの問題を解決するカント:エラー:名前空間の「文字列」「STD」のタイプ

In file included from classA.cpp:2:0: classB.h:6:10: error: 'string' in namespace 'std' does not name a type std::string str; ^

In file included from classA.cpp:3:0: classA.h:6:25: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 classB *ptr_b = new classB;

classA.hがあります:

​​

classA.cpp:

#include "classB.h" 
#include "classA.h" 

classA::classA() { 
} 

classB.h:

#ifndef CLASSB_H 
#define CLASSB_H 

class classB { 
private: 
    std::string str; 
public: 
    classB(); 

}; 

#endif /* CLASSB_H */ 

classB.cpp:私はあなたが与えることができるすべての助けをapreciate

#include <string> 
#include "classB.h" 

classB::classB() { 
} 

。私はこれを修正する方法を知らないし、私は夢中になる。

読んでいただきありがとうございます。

+1

classB.hから '#include 'する必要があります。現状では、はclassB.cppに含まれていますが、classA.cppには含まれていません(classB.hも含まれています)。 – zneak

+0

もし私がclassB.cにを含めると、私はclassB.cppで削除できますか? – BlackB0ltz

+0

はい、classB.cppから削除できます(classB.hにある場合)。 – zneak

答えて

3

#include <string>にはclassB.hが必要です。今のところclassA.cppにはclassB.hが含まれており、どこにも#include <string>が含まれていないため、std::stringに含まれるclassB.hの参照にはエラーが発生します。一般的に

名は、ヘッダーfoo.hに使用されている場合、あなたはfoo.hに名前を宣言するヘッダbar.hを含める必要があり、またはfoo.hで名前を前方に宣言します。そうでなければ、foo.hを含む他の人は、bar.hが最初に含まれるように覚えておく必要があります。

+0

助けてくれてありがとう。 – BlackB0ltz

関連する問題