Vì vậy, tôi đang cố gắng di chuyển mã OpenGL của mình từ Main() vào một lớp cụ thể sẽ chỉ xử lý đồ họa 3D khi cần thiết. Trước đây, đầu tệp main.cpp của tôi trông giống như sau:#error gl.h được bao gồm trước khi glew.h
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
Điều này làm việc đủ tốt. Những gì tôi đã cố gắng làm là di chuyển tất cả mã có liên quan đến OpenGL thành các phương thức của lớp Game
. Vì vậy, tôi lấy ra #define GLEW_STATIC
và #include <GL/glew.h>
từ trên, và đặt chúng vào Game.h, sao cho đầu Game.h bây giờ trông như thế này:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Environment.h"
Khi tôi cố gắng biên soạn, tôi nhận được lỗi tiêu đề, #error gl.h included before glew.h
.
Tại sao điều này xảy ra và làm cách nào tôi có thể sử dụng mã OpenGL (gần như) hoàn toàn bên trong các chức năng của một lớp cụ thể mà không xảy ra sự cố này?
EDIT:
Tôi cũng đã thử cấu hình này trong main.cpp, trong một nỗ lực để đảm bảo rằng không có gì bao gồm SFML trước GLEW.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>
Thật không may, điều đó không giúp ích (không có gì khác được bao gồm mà tôi không đề cập ở đây).
Điều đó có nghĩa là bạn hiện đang #bao gồm glew.h hai lần, một lần từ main.cpp và một lần từ game.h? Tôi đoán glew.h không được viết cho điều đó (hoặc không có bảo vệ hoặC#pragma), do đó bạn sẽ phải thêm các vệ sĩ của riêng bạn hoặc cẩn thận để bao gồm nó chính xác một lần. – Rup
@Rup GLEW có #include guards. Đó là một số thư viện khác bao gồm gl.h. Có thể là SFML. –
Không, tôi xóa nó khỏi main.cpp. Tôi cho rằng nó có thể là SFML, nhưng tôi đã ấn tượng rằng nó không tự động bao gồm gl.h, vì có một số hướng dẫn ở đó cho nó mà muốn bạn bao gồm một cách rõ ràng tập tin đó. Tôi sẽ fiddle xung quanh với điều đó và xem nếu đó giải quyết bất cứ điều gì - nhưng tôi vẫn cần phải sử dụng SFML trong main.cpp, ít nhất là với thiết lập hiện tại của tôi. – GarrickW