2009-09-03 6 views
1

これはかなりばかげた質問ですが、これはかなり混乱し刺激的なものであることがわかります。の作業が簡単ではありません。クラス内のC++文字列

C:\Documents and Settings\...|11|error: `string' does not name a type| 
||=== Build finished: 1 errors, 0 warnings ===| 

:私はGCCコンパイラでコードブロックを使用していると私は単純に十分な

#ifndef ALIEN_LANGUAGE 
#define ALIEN_LANGUAGE 

#include <string> 

class Language 
{ 
    public: 

    private: 
     string str; 
}; 

#endif 

奇妙な私のクラスで文字列変数を作成しようとしています、私のコンパイラはエラーがこれを言って私を停止しますなんらかの理由で、何らかの理由で私のmain.cppが "#include"を検出できるクラス "string"を見つけることができませんが、私の言語クラスはなんらかの理由では使用できません。

はこれがメインの私はちょうどメイン自体が文字列のファイルを見ることができ、それを見てすぐに書いている:

//main.cpp 

#include <iostream> 
#include <string> 
#include "alien_language.h" 

using namespace std; 

int main() 
{ 
    string str; 

    return 0; 
} 

、誰もが何が起こっているのか知っていますか?何が起こっているのだ

答えて

7

using namespace std;

あなたのクラスの文字列の先頭にstd::の接頭辞がありません。標準ライブラリのすべては、stdという名前空間にあります。

using namespace std;は、一般的には悪い習慣とみなされます。理由とその対処方法の詳細については、Using std Namespaceをご覧ください。

+0

ありがとう、私は完全にその文字列std :: prefixingを忘れてしまった、私は名前空間stdを使用していないことに慣れています。私のクラスファイルでは、しかし私のメインでそうする。cpp –

4

文字列は、名前空間stdであり、そしてあなたは、ヘッダーファイル内に完全にそれを修飾する必要があります。

#include <string> 

class Language 
{ 
    public: 

    private: 
     std::string str; 
}; 

ヘッダファイルにusing namespace std;または類似を使用しないでください。

5

文字列クラスは、std名前空間で定義されています。あなたはこれにクラスをchenge必要があります。

class Language 
{ 
    public: 

    private: 
     std::string str; 
}; 

ことも可能ですが、ヘッダファイルの先頭にこれを追加することはお勧めしません:

using namespace std; 
+0

ああ、誰かが 'using namespace std;'を推奨していません! +1 – sbi

1

あなたが不足しているようですが、私には見えますすべての重要な(風刺のヒントを持つ)using namespace std;行。クラスの前に追加するか、明示的にstd::string strを使用してください。私はヘッダファイルにusing namespace std;行を追加することをお勧めします。それを含むファイルのメインスペースを汚染することになります。

0

標準C++のstringクラスはstd名前空間にあります。ヘッダーに using std::string;のようなものを書いてもらうか、ヘッダーのstd :: stringとして完全に修飾してください。

ヘッダーのusing namespace std;は悪いことです(hereを読んでください)。