2009-10-14 33 views
5

मैं नए के एक डिबग संस्करण पर (dllimport/निर्यात) __declspec उपयोग कर रहा हूँ जैसे:'ऑपरेटर नए': परिभाषा, विभिन्न लिंकेज (नए सिरे से परिभाषित नए ऑपरेटर पर _dllspec का प्रयोग करके)

#ifdef _DEBUG 
DECLSPECCORE extern void* operator new(unsigned int size, const char* file, int line); 
extern void* operator new[](unsigned int size, const char* file, int line); 
extern void operator delete(void* address, const char* file, int line); 
extern void operator delete[](void* address, const char* file, int line); 
extern void Delete(void* address); 

#define LUDO_NEW new(__FILE__, __LINE__) 
#define LUDO_DELETE delete 

#endif 

यह मेरे लिए खड़ी कर रहा है

त्रुटि C2375: 'ऑपरेटर नया': पुनर्वितरण; अलग जुड़ाव

यह क्यों है और आप इसे कैसे ठीक कर सकते हैं? यह एकमात्र परियोजना है जिसे मैं अभी संकलित कर रहा हूं।

उत्तर

0

यदि आपके पास नए ऑपरेटर को अधिभारित करने के दो दो प्रोटोटाइप हैं तो आपको दोनों को निर्यात करना होगा। Hopefulyl कि आपकी समस्या है।

2

सी ++ रनटाइम स्वयं operator new प्रदान करता है, जिसे DECLSPECCORE के रूप में चिह्नित नहीं किया गया है - इसलिए "अलग लिंक", मूल को किसी अन्य मॉड्यूल से आयात नहीं किया गया था। यदि आप operator new को ओवरराइड करना चाहते हैं, तो यह पहले जैसा ही लिंक होना चाहिए।

0

आपका कोड कह रहा है कि आप सी ++ के "ऑपरेटर न्यू" को डीएलएल के बाहर से कॉल करने योग्य फ़ंक्शन के रूप में निर्यात करना चाहते हैं। मान लीजिए कि यह भी संभव है (शायद नहीं): क्या आप वाकई यही करना चाहते हैं?

0

एक संभावित समाधान नया स्थानांतरित करना और ऑपरेटर को अपने नामस्थान में हटाना है। उस नामस्थान में सभी प्रकारों का उपयोग उस नामस्थान के नए और हटाए जाने वाले ऑपरेटर से करना चाहिए।

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