2016-08-26 20 views
10

मैं निम्नलिखित निर्देशिका संरचनाआप जंग में submodules में मैक्रोज़ कैसे आयात करते हैं?

  • /main.rs
  • /lib.rs
  • /tutorial/mod.rs
  • /tutorial/foo.rs

मैं glium पुस्तकालय, implement_vertex! से मैक्रो का उपयोग करने की जरूरत है foo.rs में। अगर मैं foo.rs के सिर पर #[macro_use] extern crate glium; डालता हूं, तो मुझे error: an `extern crate` loading macros must be at the crate root मिलता है। मुझे error: macro undefined: 'implement_vertex!'

भी lib.rs है जो ट्यूटोरियल मॉड्यूल की क्रेट रूट है। मुझे वहां #[macro_use] डालना होगा। क्या यह 2 क्रेट जड़ें बनाता है यदि मेरे पास main.rs और lib.rs दोनों हैं?

एक सबमिशन में मैक्रोज़ आयात करने का सही तरीका क्या है?

+2

वास्तविक कोड के बिना, इसे केवल अंधेरे अनुमान से हल किया जा सकता है। हमें केवल संरचना की आवश्यकता है, जहां इसे आयात किया जा रहा है, और जहां इसका उपयोग किया जा रहा है। –

+0

आप कैसे संकलित करते हैं ('कार्गो बिल्ड')? क्या आपने अपना 'Cargo.toml' संशोधित किया है? पंक्ति 'मॉड ट्यूटोरियल' किस फाइल में है? लाइन 'mod foo' 'में कौन सी फाइल है? इस जानकारी के बिना, हम केवल अनुमान लगा सकते हैं कि आपका मॉड्यूल पेड़ कैसा दिखता है, जैसे @ डीके। पहले ही कहा जा चूका है। –

उत्तर

2

कर जैसे संकलक तुमसे कहा था:

an `extern crate` loading macros must be at the crate root

टोकरा जड़ है, जो अपने मामले में main.rs है में #[macro_use] extern crate glium; रखो। सुनिश्चित करें कि extern crate कथन आपके mod कथन से पहले है, अन्यथा मॉड्यूल आयातित मैक्रोज़ तक पहुंचने में सक्षम नहीं होंगे।

फिर आप अपने सबमिशन में मैक्रो का उपयोग कर सकते हैं।

+0

हाँ, यह पहली बात है जिसकी मैंने कोशिश की थी। यह काम नहीं किया। मुझे अभी भी त्रुटि मिलती है: मैक्रो अपरिभाषित: 'apply_vertex!' – jz87

+1

सुनिश्चित करें कि 'बाहरी क्रेट' कथन आपके 'mod' कथन से पहले है, अन्यथा आयात आयातित मैक्रोज़ तक पहुंचने में सक्षम नहीं होंगे। – durka42

+4

@ durka42 अभी भी एक ही त्रुटि की ओर जाता है। – Zelphir

6

मैक्रोज़ संकलन चरण में पर्याप्त जल्दी संभाला जाता है कि आदेश मायने रखता है। आप, जैसे मैं, शायद अच्छा हो रहा था और अपने उपयोग और क्रेट स्टेटमेंट के आदेश की देखभाल करने की आवश्यकता को दूर करने के लिए जंग का उपयोग किया जाता था।

अपने #[macro_use] extern crate glium; कथन को अपने lib.rs और/या main.rs फ़ाइल के शीर्ष पर ले जाएं।

0

मुझे अपनी मूल समस्या का पता चला। यह पता चला है कि 2 कार्गो जड़ें हैं? मेरे पास lib.rs और मुख्य.rs दोनों हैं। #[macro_use]lib.rs को रखने के लिए सही जगह निकलती है।

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