2012-05-25 21 views
12

के कारण SWIG त्रुटियां हमारे पास एक विक्रेता है जिसने हमें सी ++ लाइब्रेरी और हेडर प्रदान किए हैं, कि मैं SWIG का उपयोग करके लपेटने की कोशिश कर रहा हूं। ऐसा लगता है कि वे पूर्वप्रक्रमक निर्देशों के साथ एक आधे से भी चतुर किया जा रहा है:प्रीप्रोसेसर निर्देश

// top.h 
#define DECLARE_WITH_COMMA(a) a, 

और फिर

// foo.h 
#include "top.h" 

#define MY_TYPES(d) \ 
    d(One) \ 
    d(Two) \ 
    d(Three) \ 
    NumElems 

enum MyTypes { 
    MY_TYPES(DECLARE_WITH_COMMA) 
}; 

कौन सा सब बड़ा घूँट (संस्करण 2.0 चलाने के लिए जब मैं कोशिश है कि कहने का एक तरीका है longwinded .4) "foo.h" पर, मैं मिलता है:

foo.h:12: Error: Syntax error in input(1). 

तो मेरे सवाल है क्या मेरे विकल्प यहाँ हैं, यह देखते हुए कि मैं शायद विक्रेता की आपूर्ति हेडर बदलने के लिए नहीं करना चाहते?

+1

लाइन 84 कौन सा है? क्या आप प्रश्न में शीर्षलेखों के आधार पर न्यूनतम परीक्षण-केस बना सकते हैं, और इसे यहां पोस्ट कर सकते हैं? –

+0

अच्छा विचार, कोशिश करेंगे। – laslowh

+1

ठीक है, ऊपर कोड अब एक पूर्ण परीक्षण केस का प्रतिनिधित्व करता है। – laslowh

उत्तर

12

बड़ा घूँट, डिफ़ॉल्ट रूप से नेस्ट हेडर में recurse नहीं करता है तो अपने .i फ़ाइल की तरह कुछ दिखना चाहिए:

%module mymod 

%{ 
#include "foo.h" 
%} 

%include "top.h" 
%include "foo.h" 

भी एक बड़ा घूँट स्विच नहीं है:

-includeall  - Follow all #include statements 

लेकिन आप प्रणाली है अगर हेडर जो आपके इरादे से ज्यादा कर सकते हैं।

+0

धन्यवाद, मेरे लिए काम किया! – TimoSolo

+0

अतिरिक्त जोड़ना मेरे लिए – mydogisbox

+0

@MarkTolonen में काम करता है, अगर 'शीर्ष.h' में किसी अन्य शीर्षलेख फ़ाइल के लिए' # शामिल 'कथन है तो क्या होगा? मुझे यह समस्या है। मैंने अपनी '.i' फ़ाइल में '% include' कथन जोड़ने का प्रयास किया लेकिन मुझे एक ही वाक्यविन्यास त्रुटि मिल रही है। –

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