2011-11-18 30 views
10

कोड: 3 डी iphone प्रोग्रामिंग के लिए एक पुस्तक सेइस कोड को संकलित करने का प्रयास करते समय मुझे त्रुटि "त्रुटि: अज्ञात प्रकार का नाम 'आभासी' क्यों मिलता है?

struct IRenderingEngine { 
    virtual void Initialize(int width, int height) = 0; 
    virtual void Render() const = 0; 
    virtual void UpdateAnimation(float timeStep) = 0; 
    virtual void OnRotate(DeviceOrientation newOrientation) = 0; 
    virtual ~IRenderingEngine() {} 
}; 

सीखना OpenGLES और यह इस उदाहरण कोड का उपयोग करता है, लेकिन पुस्तक xcode 3.x

किसी तरह मैं xcode 4 के साथ अपने कुछ की तरह महसूस करने के लिए लक्षित है। ...

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

यहाँ वास्तविक त्रुटि:

/उपयोगकर्ताओं/दान/दस्तावेज़/OpenGLES/नरक ओ तीर/हैलो तीर/IRenderingEngine.hpp: 27: 2: त्रुटि: अज्ञात प्रकार का नाम 'वर्चुअल' [1]

और यह वैधता है कि यह संकलित करने में असफल होने के लिए पूरी तरह से है, बिल्कुल कोई अन्य फाइल नहीं है। (हां मैंने सचमुच एक मुख्य.एम और इस एचपीपी फाइल के साथ संकलन करने की कोशिश की है)

यह एचपीपी फ़ाइल को एक सीपीपी हेडर फ़ाइल के रूप में पहचान रहा है, हालांकि, अगर मैं इसे संकलित फाइलों में जोड़ने की कोशिश करता हूं तो यह कहता है कि "नहीं आर्किटेक्चर i386 के लिए फ़ाइल '$ (PROJECT_DIR)/हैलो एरो/IRenderingEngine.hpp' टाइप करने के लिए नियम है। "मुझे वास्तव में पता नहीं है कि

पर ध्यान दें कि मैंने मुख्य.एम के साथ संकलित किया है जिसका अर्थ है कि मैंने एक और कोको/फाउंडेशन आधारित अनुप्रयोग संकलित किया

मैंने सी ++ एप्लिकेशन के लिए संकलन करने की कोशिश की और सब ठीक काम किया .... इसी प्रकार एक मुख्य.एमएम परीक्षण फ़ाइल के साथ संकलित भी ठीक काम किया

यहाँ वास्तविक परियोजना, lemme पता है कि मैं वास्तव में पागल हूँ:

[हटाया मैं फ़ाइल खो दिया पर विचार]

+2

पोस्ट एक SSCCE। मैं इस कोड के साथ आपकी मदद नहीं कर सकता, यह स्पष्ट रूप से समस्या का वास्तविक स्रोत नहीं है। – Puppy

+0

http://pastie.org/private/07cebz0irqp6ehybicctw सचमुच पूरी फ़ाइल है और यह संकलन नहीं होंगे। बस त्रुटि फेंकता है: अज्ञात प्रकार का नाम 'आभासी' [1] – DanZimm

+0

क्या आप एक 'main.m' मतलब है? सी ++ '.m' फ़ाइलों का उपयोग नहीं करता है। एक '.cpp' का प्रयोग करें – Adam

उत्तर

22

कृपया main.m को main.m का नाम बदलें। यह मेरे लिए काम किया।

+5

से पहले के रूप में – jessecurry

+0

इस उदाहरण को xcode 4 में काम करने के लिए मुझे मुख्यस्टोरीबोर्ड_आईफोन.स्टोरीबोर्ड और मेनस्टोरीबोर्ड_आईपैड.स्टोरीबोर्ड फ़ाइलों को भी हटा देना था और साथ ही हैलोएरो-इन्फो.प्लिस्ट से उनके संदर्भों को हटा देना था, लेकिन उन लोगों के लिए त्रुटियां बहुत स्पष्ट थीं। – Lockyer

0

यह सिर्फ एक बेवकूफ अनुमान के बाद से मैं शब्द के साथ कुछ संकलन की कोशिश कभी नहीं किया है एक सी संकलक में वर्चुअल ... लेकिन क्या कोई मौका है कि आप इस सी ++ कोड को सी कोड के रूप में संकलित करने का प्रयास कर रहे थे? यही कारण है कि मैं सोच सकता हूं कि एक कंपाइलर कीवर्ड वर्चुअल को समझ नहीं पाएगा।

+0

माना जाता है कि एक्सकोड फाइलों को उनके फ़ाइल प्रकारों के आधार पर संकलित कर रहा है (जो यह एचपीपी होता है, इसलिए मुझे लगता है कि यह समझने के लिए पर्याप्त स्मार्ट है कि इसका मतलब है कि यह सीपीपी है) – DanZimm

0

शीर्षलेख <stdlib.h> सी ++ प्रोग्राम में उपयोग करने का सही नहीं है। जब मैंने इसे सी की स्टडीओ लाइब्रेरी <cstdlib> के सी ++ संस्करण के साथ बदल दिया तो आपके कोड को मेरे लिए संकलित किया गया।

+0

जब मैं हेडर में जोड़ने की कोशिश करता हूं तो यह त्रुटियां उस फ़ाइल को नहीं मिला – DanZimm

+0

मैंने सही पुस्तकालय नाम के साथ उत्तर संपादित किया। अब कोशिश करो। –

+0

एक ही मुद्दा मैं दोनों main.m और AppDelegate.m .mm विस्तार के साथ नाम बदलने के लिए किया था। – DanZimm

2

यदि आप एक्सकोड 4 का उपयोग कर रहे हैं, तो "AppDelegate.m" फ़ाइल को "AppDelegate.mm" में बदलने का प्रयास करें। इससे मेरा काम बनता है।

2

"AppDelegate.m" फ़ाइल का नाम बदलकर "AppDelegate.mm"। यह सही है!

2

मैंने GLView.h फ़ाइल से GLView.h फ़ाइल से #import "IRenderingEngine.hpp" पंक्ति को स्थानांतरित कर दिया - यह इसे मुख्य.एम और HelloArrowAppDelegate.m फ़ाइलों में आयात करने से रोकता है जब संकलित किया गया था - और प्रतिबंधित .mm फ़ाइल में आयात, जो C++ को संभाल सकता है।

मुझे कोड में टाइप करते समय पेश की जाने वाली बगों के लिए कुछ अन्य फ़िक्स भी करना पड़ता था - इसलिए माफ करना, अगर यह एकमात्र चीज नहीं है जिसे करने की आवश्यकता है, लेकिन यह उन समस्याओं की मदद कर सकता है !

+0

यह मेरे लिए काम किया! बहुत ही सरल समाधान, बस अपने सभी इंस्टेंस चर को @ कार्यान्वयन में ले जाएं। – John

1

अगर आप सी ++ फ़ाइलें (भले ही आप केवल उन्हें आयात) कहते हैं आप .m फ़ाइल है कि के फोन को बदलने की जरूरत यह .mm को

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

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