2011-12-20 7 views
8

से पहले शामिल है तो मैं अपने ओपनजीएल कोड को मुख्य() से एक विशिष्ट वर्ग में स्थानांतरित करने की कोशिश कर रहा हूं जो आवश्यक होने पर केवल 3 डी ग्राफिक्स को संभालेगा। पहले, मेरी 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" 

यह काफी अच्छा काम करता था। मैंने जो करने की कोशिश की वह सभी ओपनजीएल-प्रासंगिक कोड को Game वर्ग के तरीकों में ले जाया गया था। तो मैं ऊपर से #define GLEW_STATIC और #include <GL/glew.h> हटा दिया है, और उन्हें Game.h में डाल दिया, ऐसी है कि Game.h के शीर्ष अब इस तरह दिखता है:

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

जब मैं संकलित करने के लिए प्रयास करते हैं, मैं शीर्षक त्रुटि मिलती है, #error gl.h included before glew.h

यह क्यों हो रहा है, और मैं बिना किसी होस्टिंग के विशिष्ट वर्ग के कार्यों के अंदर ओपनजीएल कोड (लगभग) का उपयोग कैसे कर सकता हूं?

संपादित करें:

मैं भी main.cpp में इस विन्यास की कोशिश की है यह सुनिश्चित करें कि कुछ भी नहीं Glew से पहले SFML शामिल करने के लिए एक प्रयास में।

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

दुर्भाग्यवश, इससे मदद नहीं मिलती है (इसमें कुछ भी शामिल नहीं है जिसमें मैं यहां उल्लेख नहीं कर रहा हूं)।

+0

क्या इसका मतलब है कि अब आप #.ccluding glew.h को दो बार जोड़ रहे हैं, एक बार main.cpp से और एक बार game.h से? मुझे लगता है कि glew.h उस के लिए लिखा नहीं गया है (या तो कोई गार्ड या #pragma) ताकि आपको या तो अपने स्वयं के गार्ड जोड़ना होगा या इसे ठीक से शामिल करना होगा। – Rup

+0

@Rup GLEW में # शामिल गार्ड हैं। यह कुछ अन्य पुस्तकालय है जिसमें gl.h शामिल है। संभवतः एसएफएमएल। –

+0

नहीं, मैं इसे main.cpp से हटा देता हूं। मुझे लगता है कि यह एसएफएमएल हो सकता है, लेकिन मैं इस धारणा के तहत था कि इसमें gl.h शामिल नहीं था, क्योंकि वहां कुछ ट्यूटोरियल हैं जो चाहते हैं कि आप स्पष्ट रूप से उस फ़ाइल को शामिल करना चाहते हैं। मैं इसके साथ घूमता हूं और देखता हूं कि क्या यह कुछ हल करता है - लेकिन मुझे अभी भी मेरे वर्तमान सेटअप के साथ, main.cpp में SFML का उपयोग करने की आवश्यकता है। – GarrickW

उत्तर

14

कुछ अन्य पुस्तकालय gl.h शामिल हैं। मेरा अनुमान एसएफएमएल होगा। सुनिश्चित करें कि आप गेमएच में पहले GLEW शामिल करते हैं और उन स्थानों को चेक करें जहां आप गेम.h शामिल करते हैं, यह सुनिश्चित करने के लिए कि आप SFML या कुछ और शामिल नहीं हैं जिसमें गेम.h से पहले gl.h शामिल है।

आप की तरह कुछ है, तो:

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

इसे प्रभावी ढंग से Glew से पहले gl.h शामिल होंगे।

+0

मैंने '.cinee "Game.h" ऊपर '# शामिल <एसएफएमएल/ग्राफिक्स.hpp>' main.cpp के भीतर (मैं मुख्य पोस्ट को प्रदर्शित करने के लिए संपादित कर दूंगा), लेकिन इससे कोई फर्क नहीं पड़ता। मैं # चीजों को शामिल करने के तरीके से गहराई से परिचित नहीं हूं, इसलिए कुछ ऐसा हो सकता है जो मुझे याद आ रही है। – GarrickW

+0

@GarrickW शायद यह कुछ और हैडर है? क्या आप कोड :: ब्लॉक में "लॉग बनाएं" टैब देख सकते हैं और उन संदेशों को पोस्ट कर सकते हैं जैसे "फ़ाइल में शामिल ..."? यह अपराधी को खोजने में मदद कर सकता है। –

+0

एएच-एचए! मुझे यह पता चला है - यह पता चला है कि समस्या Game.cpp में थी। वहां, मुझे कुछ कारणों से ' ऊपर" गेम.h "शामिल था। मुझे नहीं पता था कि वर्गों के लिए .cpp फाइलें उसी वर्ग के शीर्षलेखों के सामने संकलित की गई थीं, हालांकि अब मैं इसके बारे में सोचता हूं ... मुझे सीखने के लिए बहुत कुछ है। धन्यवाद! – GarrickW

1

मुझे लगता है कि मुझे यह समस्या एक बार भी थी। यह किसी भी तरह से एसएफएमएल (1.6?) के कारण ओपनजीएल सामान शामिल है।

आईआईआरसी (कुछ समय हो गया है और मुझे एसएफएमएल 2 पर स्विच करने के बाद अब GLEW की आवश्यकता नहीं है) यह GLEW.h सहित एसएफएमएल के ग्राफिक्स.hpp के कारण भी है। गार्ड शामिल करने के कारण नहीं होना चाहिए, लेकिन मुझे लगता है कि कुछ संस्करणों के साथ यह अभी भी हो सकता है। GLEW के शीर्षलेख को पूरी तरह से छोड़ना आपके लिए संभव हो सकता है, क्योंकि इसे किसी भी तरह से एसएफएमएल के माध्यम से शामिल किया गया है।

एसएफएमएल का कौन सा संस्करण आप चल रहे हैं? 1.6, 2.0 या 2.0 नई एपीआई के साथ? इसके अलावा, GLEW का उपयोग करने का कारण क्या है? एसएफएमएल से आप कुछ खो रहे हैं? शायद यह नवीनतम संस्करण में कुछ शामिल है, इसलिए आपको इसे भी शामिल करने से रोकता है।

संबंधित मुद्दे