2011-08-22 169 views
33

我收到錯誤:標識符「字符串」未定義。標識符「字符串」未定義?

但是,我包括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'這裏的順序很重要(也就是包含警衛圍住雜注) –

回答

60

<string.h>是舊的C頭。 C++提供了<string>,然後它應該被稱爲std::string

+3

/facepalm。我覺得自己像個白癡。謝謝。 – Rhexis

+3

使用命名空間std – TechplexEngineer

+4

不要使用'命名std',我已經downvoted所有的建議是有原因的答案。 – Puppy

8

因爲string在命名空間std中定義。與std::string更換string,或添加

using std::string; 

下方的include線。

它可能在main.cpp工作,因爲其他一些頭有這個using線(或類似的東西)。

11

你想要做#include <string>而不是string.h,然後類型字符串在std命名空間中,所以你需要使用std::string來引用它。

4

也許你想要#include<string>,而不是<string.h>std::string還需要命名空間限定或明確的using指令。

2

您忘記了您所指的名稱空間。添加

using namespace std;

避免的std :: string所有的時間。

+3

對於那些誰downvoted:感謝您的建設性意見:P – m0skit0

+2

'使用命名空間std;'實在是太差了,尤其是在頭部。 – Puppy

+1

謝謝!你能解釋爲什麼嗎? – m0skit0

1

#include <string>將是正確的C++包括,你也需要using namespace std;

2

std::string指定命名空間或更一般地,必須使用std命名空間。如果這個代碼在main.cpp中,你應該寫

using namespace std; 

如果該聲明是在頭,那麼你不應該包括命名空間和只寫

std::string level;