2011-12-20 2 views
8

그래서 Main()에서 OpenGL 코드를 필요한 경우에만 3D 그래픽을 처리하는 특정 클래스로 이동하려고합니다. 이전에 내 main.cpp 파일의 상단은 다음과 같습니다.#error gl.h가 glew.h 앞에 포함되었습니다.

#define GLEW_STATIC 
#include <GL/glew.h> 
#include <SFML/Graphics.hpp> 
#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include "Game.h" 

이 방법으로도 충분했습니다. 내가 시도한 것은 모든 OpenGL 관련 코드를 Game 클래스의 메서드로 옮기는 것입니다. ,

#define GLEW_STATIC 
#include <GL/glew.h> 
#include <SFML/Graphics.hpp> 
#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include "Environment.h" 

내가 컴파일 할 때, 나는 제목 오류 : 그래서 Game.h의 상단이 지금처럼 보인다 있도록, 위의에서 #define GLEW_STATIC#include <GL/glew.h>을 제거하고 Game.h에 넣어 #error gl.h included before glew.h.

왜 이런 일이 벌어지고 있는데, 어떻게 이런 일이 일어나지 않고 특정 클래스의 기능 안에서 OpenGL 코드를 사용할 수 있습니까?

편집 : 나는 또한 아무것도 GLEW 전에 SFML 포함되지 않습니다 있는지 확인하기위한 시도로, MAIN.CPP에서이 구성을 시도

.

#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include "Game.h" 
#include <SFML/Graphics.hpp> 

불행하게도, 도움이되지 않습니다 (아무것도 내가 여기 언급 아니에요 포함되고 없다).

+0

glew.h가 main.cpp에서 한 번, game.h에서 한 번 # 두 번 포함한다는 의미입니까? glew.h는 (경비원이나 #pragma가 없기 때문에) 작성된 것이 아니기 때문에 경비원을 추가하거나 정확히 한 번 포함시켜야합니다. – Rup

+0

@Rup GLEW에는 # 가드가 포함되어 있습니다. gl.h를 포함하는 다른 라이브러리입니다. 아마도 SFML. –

+0

아니요, main.cpp에서 제거합니다. 나는 그것이 SFML일지도 모른다고 생각하지만, gl.h를 자동으로 포함하지 않는다는 인상을 받고있다. 왜냐하면 당신이 명시 적으로 그 파일을 포함하기를 원하는 튜토리얼이 있기 때문이다. 필자는 그걸 가지고 주위를 둘러보고 그 것이 해결되는지 살펴 보겠습니다.하지만 적어도 현재 설치시에는 main.cpp에서 SFML을 사용해야합니다. – GarrickW

답변

14

다른 라이브러리에는 gl.h가 포함됩니다. 내 추측은 SFML 것입니다. Game.h에 GLEW를 먼저 포함하고 Game.h를 포함하는 장소에서 SF.h 또는 Game.h 앞에 gl.h를 포함하는 다른 것을 포함하지 않는지 확인하십시오. 이 같은 경우

:

#include <something_that_includes_gl.h> 
#include "Game.h" 

을 효과적으로 GLEW 전에 gl.h 포함됩니다.

+0

main.cpp에서 #include 를 위의'#include "Game.h"'위로 옮기려고했습니다. (필자는 시연하기 위해 메인 포스트를 편집 할 것입니다.)하지만 아무런 차이가 없습니다. 나는 일을 포함하는 방식에 친밀하게 익숙하지 않다. 그래서 내가 놓친 것이있을 수있다. – GarrickW

+0

@ 가디언 아마 다른 머리글일까요? Code :: Blocks의 "Build log"탭을 확인하고 "from file included ..."와 같은 메시지를 게시 할 수 있습니까? 범인을 찾는 데 도움이 될 수 있습니다. –

+0

AH-HA! 나는 그것을 발견했다. Game.cpp에 문제가 있음이 밝혀졌다. 거기에는''의 "Game.h"위에 몇 가지 이유로 포함되어있었습니다. 클래스에 대한 .cpp 파일이 동일한 클래스의 헤더 앞에 컴파일 된 것을 알지 못했지만 이제는 생각할 수 있지만 ... 배울 점이 많습니다. 감사! – GarrickW

1

나는이 문제도 한 번 생각했다. 그것은 어떻게 든 SFML (1.6?)이 OpenGL과 관련된 것을 포함하는 방식으로 발생합니다.

IIRC (SFML2로 전환 한 이후 더 이상 GLEW가 필요하지 않습니다.) SFML의 Graphics.hpp (GLEW.h 포함) 때문입니다. 경비원을 포함 시켜서는 안되지만, 일부 버전에서는 여전히 이런 일이 발생할 수 있다고 생각합니다. 어쨌든 SFML에 포함되어 있기 때문에 GLEW의 헤더를 완전히 건너 뛸 수도 있습니다.

어떤 SFML 버전을 실행하고 있습니까? 1.6, 2.0 또는 2.0에서 새 API를 사용합니까? 또한 GLEW를 사용하는 이유는 무엇입니까? SFML에서 누락 된 것이 있습니까? 어쩌면 최신 버전에 포함 된 것일 수도 있으므로 포함시키지 않아도됩니다.

관련 문제