2010-11-24 11 views
5

ओवरलोड करता हूं मेरी कक्षा पॉलिमॉर्फिक है और इसका उपयोग किसी भी तरह से नहीं किया जाना चाहिए। इसमें एक सदस्य है जो फ़ॉन्ट & प्रकार का है और नतीजतन संकलक एक = ऑपरेटर उत्पन्न नहीं कर सकता है। तो मैंने अभी असाइनमेंट की नकली कार्यान्वयन और प्रतिलिपि बनाने वाले निर्माता को बनाया है, उन्हें कक्षा के निजी में रखा है, लेकिन यह अभी भी मुझे असाइनमेंट ऑपरेटर के बारे में चेतावनी देता है जो उत्पन्न नहीं हो पाता है। मैं इस चेतावनी से कैसे छुटकारा पा सकता हूं?असाइनमेंट ऑपरेटर तब भी उत्पन्न नहीं किया जा सका जब मैं = ऑपरेटर

धन्यवाद

चेतावनी 9 चेतावनी C4512: 'AguiWidget': असाइनमेंट ऑपरेटर जेनरेट नहीं हो सकता C: \ Users \ जोश \ दस्तावेज \ विजुअल स्टूडियो 2008 \ परियोजनाओं \ Agui \ alleg_5 \ Agui \ aguiwidget.hpp 250

+1

पोस्ट कुछ कोड कृपया। – casablanca

+0

कृपया कुछ कोड पोस्ट करें। (बीआईएस रिपेटिटस) – paercebal

+1

और सटीक चेतावनी भी। –

उत्तर

9

असाइनमेंट ऑपरेटर जो संकलक आपको चेतावनी दे रहा है वह आपकी अपनी कक्षा के लिए है। क्या आप अब है:

AguiWidget& operator=(const AguiFont &tmp); 

क्या आप की जरूरत है:

AguiWidget& operator=(const AguiWidget &tmp); 
+0

ओह कि यह है ... – jmasterx

+0

आपको इसे निजी घोषित करना चाहिए - जो कॉपी असाइनमेंट ऑपरेटर का संकलन-समय त्रुटि (लिंक-टाइम के विपरीत) का कोई भी प्रयास करता है। – Tabber33

+0

@ Tabber33: यह पहले से ही निजी था। ओपी ने सिर्फ एक पल पहले अपना कोड हटा दिया। – casablanca

3

आप इसे अक्षम कर सकते हैं। यह वास्तव में काम नहीं करेगा, अगर आप वास्तव में उन ऑपरेटरों का उपयोग करने की कोशिश कर रहे हैं।

क्या आप वाकई हस्ताक्षर सही प्राप्त कर चुके हैं? क्या आपने उन्हें प्रत्येक वर्ग, आधार और व्युत्पन्न के लिए बनाया था?

+0

आपको इसे प्रत्येक प्रकार के लिए बनाना है? – jmasterx

+0

हाँ। यह वास्तव में वास्तव में एक बेवकूफ और बेकार चेतावनी है; जब तक कि आप वास्तव में उन ऑपरेटरों का उपयोग करने का प्रयास नहीं करते हैं, इससे कोई फर्क नहीं पड़ता है और यह बहुत उपयोगी संरचनाओं को अवरुद्ध करता है (बढ़ावा देता है कि यह उनमें से एक अरब को उल्टी कर देता है)। आपको विश्व स्तर पर इसे अक्षम करने पर विचार करना चाहिए। –

2

boost::noncopyable का उपयोग करें।

class AGUI_CORE_DECLSPEC AguiWidget : private boost::noncopyable 

नोट:

बढ़ावा :: noncopyable के रूप में अच्छी तरह से सभी उप-वर्गों के लिए लागू किया जाएगा।

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

वाह ... कि एक डरावना वर्ग है ...

pimpl idiom उपयोग कोड के घटकों को कम करने और इंटरफेस पठनीयता में सुधार करने के लिए।

इसके अलावा आपको संरक्षित सदस्य चर (जितना संभव हो सके) से बचने की कोशिश करनी चाहिए क्योंकि यह encapsulation तोड़ता है।

+0

बूस्ट को इतनी सरल के लिए खींचने की कोई आवश्यकता नहीं है (जब तक कि वह बूस्ट का उपयोग नहीं कर रहा हो)। सभी ओपी को अपने एग्जिमेंट ऑपरेटर को 'AguiFont'' के बजाय 'AguiWidget' प्रकार के तर्क को स्वीकार करने के लिए ठीक करना है। और वह एक डरावनी कक्षा है :- डी – Praetorian

+0

पर्याप्त सच है। हालांकि, अगर वह बूस्ट का उपयोग नहीं करता है तो उसे अपनी "गैर-लोकप्रिय" कक्षा बनाना चाहिए क्योंकि यह पठनीयता में सुधार करता है और स्पष्ट रूप से इरादे दिखाता है। – ronag

+0

@ प्रेटोरियन आप लगभग 30 घटनाओं के लिए कॉलबैक के साथ विजेट क्लास बनाने का प्रस्ताव कैसे देंगे, गुईचहान की विजेट क्लास भी बहुत बड़ी है। – jmasterx

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