2011-08-22 28 views
33

エラー "identifier" "string" undefinedが表示されます。識別子 "文字列"は未定義ですか?

しかし、私はstring.hを含めています。私のメインファイルには、すべて正常に動作しています。

CODE:これが発生している理由

#pragma once 
#include <iostream> 
#include <time.h> 
#include <string.h> 

class difficulty 
{ 
private: 
    int lives; 
    string level; 
public: 
    difficulty(void); 
    ~difficulty(void); 

    void setLives(int newLives); 
    int getLives(); 

    void setLevel(string newLevel); 
    string getLevel(); 
}; 

誰かが私に説明していただけますか?

+3

を書きますあなたのコードで。あなたのコンパイラが '#pragma once'ディレクティブでうまくいくならば、' #ifndef XXX_HEADER // #define XXX_HEADER // #pragma once // ... // #endif'という順序が重要です(つまりincludeプラグマを囲むガード) –

答えて

60

<string.h>は古いCヘッダーです。 C++は<string>を提供し、それからstd::stringと呼ばれるべきです。

+3

/facepalm。私は馬鹿のように感じる。ありがとう。 – Rhexis

+3

using namespace std – TechplexEngineer

+4

'' namespace std'を使わないでください。私はすでに理由を考えてそれを推奨するすべての答えをdownvotedしています。 – Puppy

8

が名前空間stdに定義されているためです。 std::stringstringを交換したり、あなたincludeライン以下

using std::string; 

を追加します。

おそらくmain.cppで動作しますが、他のヘッダーの一部にこのusing行(または類似のもの)が含まれている可能性があります。

11

string.hの代わりに#include <string>を実行した後、タイプ文字列がstd名前空間に存在するので、参照するにはstd::stringを使用する必要があります。

4

おそらく#include<string>になりました。<string.h>ではありません。 std::stringには、名前空間の修飾、または明示的なusing指示が必要です。

2

あなたが参照している名前空間を忘れてしまった。

using namespace std;

がのstd ::文字列のすべての時間を避けるために追加します。

+3

downvoted:あなたの建設的なコメントに感謝します:P – m0skit0

+2

'using namespace std;'は本当に悪いです、特にヘッダーで。 – Puppy

+1

ありがとう!なぜ説明できますか? – m0skit0

1

#include <string>が含ま++正しいCになり、また、あなたはあなたがのstd名前空間を使用する必要がありますusing namespace std;

2

で、より一般的にstd::stringかで名前空間を指定する必要があります。この宣言は、ヘッダ内にある場合はmain.cppにこのコードは、あなたが

using namespace std; 

を書く必要があります場合は、名前空間を含めるべきではないとだけ、あなたは警備員を含める使うべき側のコメントとして

std::string level; 
関連する問題