2011-02-04 7 views
5

私はC++を初めて使っていますが、なぜこれが私のためにコンパイルされないのか分かりません。私はMacでXcodeでコーディングしていますが、私は自分のmakefileでビルドしています。C++ g ++はクラスヘッダーファイルの 'string'型を見つけることができません

とにかく、「文字列」タイプが見つからないという2つのコンパイラエラーが表示されます。どんな援助も歓迎されるだろう。コード:

//#include <string> // I've tried it here, too. I'm foggy on include semantics, but I think it should be safe inside the current preprocessor "branch" 
#ifndef APPCONTROLLER_H 
#define APPCONTROLLER_H 

#include <string> 
class AppController { 
// etc. 
public: 
    int processInputEvents(string input); //error: ‘string’ has not been declared 
    string prompt(); //error: ‘string’ does not name a type 
}; 
#endif 

私は私のmain.cppに、このファイルを含め、他の場所メインで私はstring型を使用し、それだけで正常に動作します。主に私はstringの代わりにiostreamを含んでいます(他の目的のために)。はい、私も私のAppControllerクラスでiostreamを含めてみましたが、それは何も解決しませんでした(私は本当にそれを期待していなかった)。

だから私は本当に何が問題なのか分かりません。何か案は?

答えて

30

文字列がstd名前空間にあります。

#include <string> 
... 
std::string myString; 

代わりにあなたが

using namespace std; 

を使用することができますしかし、これは言っヘッダを含む誰のためのグローバルな名前空間を汚染しますと、ヘッダーで行うには非常に悪いことです。それはソースファイルのために大丈夫です。

using std::string; 

これもグローバル名前空間に文字列型の名前(または現在の名前空間)をもたらす、と:そこは(名前空間を使用する場合と同じ問題のいくつかを持っている)を使用することができ、追加の構文は次のとおりです。そのようなことは一般にヘッダーでは避けなければならない。

+1

+1で頭の中で 'namespace'を使うのを避けるためには、 –

+0

+1と答えがいいです。可能な実装方法を述べる。 – Tirth

関連する問題