2012-04-23 4 views
0

아래 클래스는 약 20 개의 오류가 발생하지만 벡터 총알은 주석 처리하면 모두 괜찮아 보입니다. 명백한 오류가 누락 되었습니까?C++ - 오류를 일으키는 벡터

#include <vector> 
#include "SDL.h" 
#include "Bullet.h" 

#ifndef GAMEDATA_H 
#define GAMEDATA_H 

class GameData 
{ 
public: 
    GameData(); 
    ~GameData(); 
    GameData(const GameData& data); 
    GameData& operator=(const GameData* rhs); 

    vector<Bullet> bullets; 

    SDL_Surface* shipimage; 
    SDL_Surface* bulletimage; 
}; 

#endif 
+5

지금까지의 응답은 정확할 수 있지만 구체적이고 정확한 오류 메시지를 포함해야합니다. 대부분의 경우 차이가 있습니다. – crashmstr

답변

7

vector은 내부 네임 스페이스 std입니다. vectornamespace std에 선언

std::vector<Bullet> bullets; 
+0

와우 ... 나는 그것을 놓쳤다 고 믿을 수 없다. 고마워, 지금 큰 작품! – will

2

: 당신 bullets 선언을 수정합니다. 형식을 std::vector으로 변경하면 모두 정상적으로 작동합니다. 당신이 std 멤버를 사용하는 경우 소스 파일에서

, 지나치게 당신은 유용 선언 찾을 수 있습니다

using namespace std; 

을 다른 코드 라인 전에. 이렇게하면 std:: 한정자없이 std 회원에 액세스 할 수 있습니다. 이것은 정확히 대부분의 예제에서 std::의 정보를 볼 수없는 이유입니다.이 지시어를 선언합니다.

+4

'using namespace std;'는 일반적으로'vector','string' 등의 심볼을 전역 이름 공간에 넣는 것보다 훨씬 많은 심볼을 가져 오기 때문에 이것을 해결하는 것은 좋지 않습니다. – Griwes

+0

나는 정확한 것을 말하려고하고 있었다. 예제에서 일반적으로 사용하는 이유를 알려주지 만 "namespace 사용"지시문을 사용하도록 조언하지 않는 것이 좋습니다. – mfontanini

+1

'네임 스페이스 사용하기'는 범위가 제한되어있는 한 괜찮다고 생각합니다. 때로는 변경할 수있는 또 다른 구현 세부 사항 인 함수 범위 내에서 사용하기도합니다. 나는 또한 (작은) 소스 파일에서'네임 스페이스 사용하기 '는 괜찮다고 생각한다. 왜냐하면 충돌의 경우에 그것을 변경하는 것이 여전히 저렴하기 때문이다. 실제 헤더는 헤더 파일에'namespace'를 사용합니다. 왜냐하면 헤더를 포함하고있는 파일에서 전역 네임 스페이스를 오염시킬 것이기 때문입니다. – ollb

관련 문제