2012-03-13 24 views
16

मुझे दो पुस्तकालयों को लिंक करना होगा, ए और बी कहें। कुछ फाइलें दोनों पुस्तकालयों में आम हैं। तो, मैं नामस्थान के अंदर लाइब्रेरी ए में फ़ंक्शंस घोषित करता हूं, एबीसी कहता हूं।सी ++: नामस्थान के अंदर बाहरी सी कार्य

[ in A] 

    namespace abc { 
    extern "C" void func(); 
    } 


[in B] 

    extern "C" void func(); 

परियोजना का निर्माण करते हैं, संकलक समारोह समारोह की कई परिभाषाएं कह जोड़ने त्रुटियों फेंकता है: तो, ए और बी में एक समारोह समारोह नीचे की तरह दिखता है। नामस्थान के अंदर ए में फ़ंक्शन func नहीं है या बाहरी "सी" फ़ंक्शंस के साथ कुछ समस्या है। यदि वहां है, तो मैं उन्हें दोनों को अलग कैसे कर सकता हूं?

उत्तर

23

जब आप बाहरी "सी" का उपयोग करते हैं तो आप नाम मैंगलिंग बंद कर रहे हैं ताकि आप नेमस्पेस जानकारी खो दें क्योंकि सी में ऐसी कोई अवधारणा नहीं है। यह एक डुप्लिकेट परिभाषा का कारण बनता है।

+1

नोट, हालांकि, उस नाम का नाम सी प्रीप्रोसेसर के लिए बंद नहीं किया जा सकता है। विजुअल सी ++ 2010 में '__FUNCTION__' मैक्रो का मान' बाहरी 'सी' 'के तहत भी पूरी तरह से योग्य पहचानकर्ता बना हुआ है, उदा। "आपका नाम"। नामस्थानों में मैक्रोज़ को कॉल करते समय यह आपके पैरों पर गिर जाएगा जो '__FUNCTION__', '__PRETTY_FUNCTION__' या' __func__' जैसे पूर्वनिर्धारित मैक्रोज़ का उपयोग करते हैं। मेरे मामले में (डीएलएल से सी स्टब्स निर्यात) यह किया ;-) –

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