2009-06-22 5 views
1

프로젝트 코드를 재구성했는데 해결할 수없는 오류가 발생했습니다. 이 헤더는 컴파일하려고하는 .cpp 파일에 포함됩니다.VC++에서 헤더 파일을 컴파일 할 때 문제가 발생했습니다.

오류 C2143 : 구문 오류 :

#include "WinMain.h" 
#include "numDefs.h" 
#include <bitset> 

class Entity 
{ 
public: 
    Entity(); 
    virtual ~Entity(); 

    virtual bitset<MAX_SPRITE_PIXELS> getBitMask(); 
    virtual void getMapSection(float x, float y, int w, int h, bitset<MAX_SPRITE_PIXELS>* section); 
}; 

나는 엔티티 :: getBitMask()의 ​​선언이 컴파일러 오류를 받고 있어요없는 ';' '엔티티 :: 비트 세트': '<'

오류 C2433하기 전에 데이터 선언

오류 C4430에서 허용 '가상'하지 : 타입 지정자 누락 - int로 가정. 참고 : C++은 default-int를 지원하지 않습니다.

오류 C2238 : ';'앞에 예기치 않은 토큰이 있습니다.

다음 줄에도 유사한 오류가 있습니다. 비트셋이 포함되지 않는 것 같지만 분명히 그렇습니까? 나는 무엇이 잘못되었는지 알 수 없다. WinMain.h는 windows.h를 포함하고 numDefs.h는 아무것도 포함하지 않습니다.

는 MS 비주얼 C++를 사용하여 2008 년

+0

MAX_SPRITE_PIXELS은 무엇이며 어디에 정의되어 있습니까? –

+0

MAX_SPRITE_PIXELS이 numDefs.h에서 정의되었습니다 –

답변

8

의 오류처럼 보인다. 당신이 중 하나가이 이름 std::bitset이기하여 참조하거나 클래스 선언하기 전에 어딘가에 using namespace std;를 추가 할 필요가 있으므로

0

std::bitset<MAX_SPRITE_PIXELS>로 비트 세트를 선언 "numDefs.h"

5

bitset 템플릿은 std:: 네임 스페이스에 정의되어 있습니다.

+2

"namespace std; somewhere를 사용하여 추가"하지만 헤더 파일에는 없습니다 – TimW

+0

어디에서이 작업을 수행 할 수 있습니까? 하나의 네임 스페이스 만 사용하므로 "namespace std;"를 사용해야합니다. #include 전에 모든 내 cpp 파일? –

+1

지금까지 어떻게 했습니까? 스탠다드 라이브러리의 것들을 사용할 때 std :: 접두어를 쓰는 것을 권장합니다. 그렇지 않으면 잘 모르는 전역 네임 스페이스에 매우 일반적인 이름 (예 : "copy")을 가진 많은 것들이 생깁니다. 이것은 놀라운 효과를 가져올 수 있습니다. 그렇지 않으면 헤더에서 정규화 된 이름을 사용하고 "using namespace std;"를 사용하는 것이 가장 좋습니다. #includes 뒤에 .cpps의 맨 위에. – sth

4

std :: bitset라고해야한다고 생각합니다.

관련 문제