2011-08-22 2 views
33

식별자 "string"이 (가) 정의되지 않았습니다.식별자 "string"이 정의되지 않았습니까?

그러나 string.h를 포함하고 있으며 내 주 파일에 모든 것이 잘 작동합니다.

코드 :이 발생하는 이유

#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

string이 네임 스페이스 std에 정의되어 있기 때문입니다. std::stringstring를 교체하거나 include 라인 아래

using std::string; 

를 추가합니다.

일부 다른 헤더에이줄이 있거나 그 비슷한 문자가 있기 때문에 main.cpp에서 작동합니다.

11

string.h 대신 #include <string>을 입력하고 유형 문자열이 std 네임 스페이스에 있으므로,이를 참조하려면 std::string을 사용해야합니다.

4

아마도 #include<string>이 아니라 <string.h>이 아닙니다. std::string에는 네임 스페이스 한정자 또는 명시 적 using 지시문이 필요합니다.

2

당신이 말하는 네임 스페이스를 잊어 버렸습니다.

using namespace std;

는 표준 : : 문자열 모든 시간을 피하기 위해 추가합니다.

+3

downvoted 분들 : 건설적인 의견을 주셔서 감사합니다 : P – m0skit0

+2

'using namespace std;'는 정말, 특히 헤더에 좋지 않습니다. – Puppy

+1

감사합니다. 이유를 설명해 주시겠습니까? – m0skit0

1

#include <string> 또한 당신은 표준 네임 스페이스를 사용해야합니다 using namespace std;

2

더 일반적으로 std::string와 네임 스페이스를 지정하거나 할 필요가 포함 ++ 올바른 C 될 것이다. 이 선언은 헤더에있는 경우 MAIN.CPP이 코드는

using namespace std; 

를 작성해야하는 경우에, 당신은 네임 스페이스를 포함하지 않아야 그냥, 당신은 경비를 포함 사용해야합니다 측 주석으로

std::string level; 
관련 문제