2010-02-09 2 views
1

이 문제가 발생했으나 해결 방법을 잊어 버렸습니다.STL의 문자열 클래스를 사용할 수 없음

STL 문자열 클래스를 사용하고 싶지만 컴파일러가 찾지 못했다고 불평하고 있습니다. 다음은 완전한 .h 파일입니다.

#ifndef MODEL_H 
#define MODEL_H 

#include "../shared/gltools.h" // OpenGL toolkit 
#include <math.h> 
#include <stdio.h> 
#include <string> 
#include <iostream> 

#include "Types.h" 

class Model 
{ 

public: 

    obj_type_ptr p_object; 
    char Load3DS (char *p_filename); 
    int LoadBitmap(char *filename); 

    int num_texture; 
    string fun("alex"); 

    Model(char* modelName, char* textureFileName); 
}; 

#endif 
+0

포함 파일을 찾을 수 없습니까? odd .... –

+3

컴파일러 오류 메시지를 포함하십시오. 헤더 파일에 std ::를 접두어로 붙이지 않는 것처럼 보입니다. –

답변

11

예 : std::string을 사용하고 싶습니까?

그냥 string입니다. using namespace ... 선언이 있지만 헤더 파일에서 실제로 좋은 아이디어는 아닌 경우 작동합니다.

+0

':: std :: string' – Omnifarious

+0

... '네임 스페이스 사용'이외의 다른 방법이 있습니다. – Potatoswatter

+0

Anon, 헤더 파일에서 "네임 스페이스 사용"을 사용하는 것이 좋지 않은 이유는 무엇입니까? – Lipis

1

ohhh, std :: string. btw 헤더 파일에서 using 네임 스페이스를 사용하지 마십시오.

3

STL의 모든 식별자는 std 네임 스페이스에 있습니다. using namespace std;, using std::string; 또는 typedef std::string xxx;이 될 때까지 std::string이라고해야합니다.

머리말에있는 어떤 종류의 선언, 특히 자신의 네임 스페이스 외부 선언은 다른 사람들이 언급 한 것처럼 나쁜 생각입니다.

그래서, 클래스에 수입 std::string :

class Model 
{ 
    typedef std::string string; 

    public: 
+1

당신은 결코 알지 못할 것입니다! 그러나 나는 그 대답을 가로 질러 일어 났으므로, +1했다. – GManNickG

1

뿐만 아니라 다른 답변에서 언급 한 네임 스페이스의 문제는, 당신은 클래스 멤버로 선언에서 변수를 만들 수 없습니다. 당신이

이 여전히 클래스 내부의 불법
class Model { 
    // ... 
    std::string fun("alex"); 
}; 

로 변경 가정하면,이 선언에 값을 할당 할 수 없습니다, 당신은 그것을 떠날 필요가 :

class Model { 
    // ... 
    std::string fun; 
}; 

을 그리고 당신이 원하는 경우 "를 제공하기 위해 alex "가 생성되면 생성자에서 초기화합니다.

Model::Model(...) 
    : fun("alex") // initialiser 
{ 
    // ... 
} 
+0

'std :: string fun = "alex"는 완벽하게 유효하며 변수가 선언 될 때 변수를 초기화합니다. 변수를 생성 할 때 즉시 값을 할당 할 수 있으며 일반적으로이 값을 지정해야합니다. – jalf

+0

정적 멤버 정수 데이터 멤버 만이 문자열을 포함하지 않는 초기화 된 수 있기 때문에 나는 클래스 멤버로 선언 할 때 참조했다. 수정 된 답변은이를 명확히합니다. – AshleysBrain

관련 문제