2010-11-30 14 views
7

कृपया इस कोड को देखो और चलाने यह:
मैं बहुत अजीब त्रुटि हो रही है:
त्रुटि 1 त्रुटि C2663: 'संभाजक :: allocate_help': 2 भार के कोई राशि 'इस' सूचक के लिए कानूनी रूपांतरण'इस' सूचक करने के लिए कोई कानूनी रूपांतरण

template<class FailureSignal> 
class Allocator 
{ 
private: 
    template<class Exception,class Argument> 
    void allocate_help(const Argument& arg,Int2Type<true>) 
    { 
    } 

    template<class Exception,class Argument> 
    std::nullptr_t allocate_help(const Argument& arg,Int2Type<false>) 
    { 
     return nullptr; 
    } 

public: 
    template<class T> 
    void Allocate(signed long int nObjects,T** ptr = 0)const 
    { 
    allocate_help<std::bad_alloc>(1,Int2Type<true>()); 
    } 

}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Allocator<int> all; 
    all.Allocate<int>(1); 
    return 0; 
} 

मैं बिल्कुल इस त्रुटि संदेश को समझ नहीं पा रहा हूं। उम्मीद है कि कोई मेरी इस के साथ मदद कर सके। धन्यवाद।

+1

आपके द्वारा अनुरोध किए गए संकलन को संकलित करना है। 'Int2Type' घोषित/परिभाषित नहीं किया गया है –

उत्तर

12

मैंने देखा Allocate घोषित किया गया है const लेकिन allocate_help नहीं है - क्या यह इस मुद्दे से संबंधित हो सकता है?

+1

हां, धन्यवाद। क्या वे थोड़ा अधिक जानकारीपूर्ण संदेश प्रदान नहीं कर सके? –

+2

@ यहां: खोज और [आप पाएंगे] (http://msdn.microsoft.com/en-us/library/bhx1a546.aspx "कंपाइलर त्रुटि C2663")। दो सुझाए गए प्रस्ताव हैं। * 1: ऑब्जेक्ट घोषणा से ** const ** हटाएं। 2. सदस्य फ़ंक्शन ओवरलोड में से एक में ** const ** जोड़ें। * (C2663 के लिए खोज करते समय यह Google पर पहली हिट है) – Default

+1

@ यहां: यह अपने तरीके से बहुत जानकारीपूर्ण है :) यह कहता है कि यह परिवर्तित नहीं कर सकता 'allator_help' अधिभारों में से किसी एक के लिए 'यह' सूचक (यानी 'कॉन्स्ट ऑलोकेटर *' से 'आवंटक *' 'इस मामले में)। –

0

मुझे वही त्रुटि मिली जो const के कारण भी थी लेकिन थोड़ा अलग तरीके से।

मेरे पास दो वर्चुअल फ़ंक्शन (अधिभार) हैं, एक const था और दूसरा नहीं था। यह समस्या पैदा कर रहा था। यदि आप किसी फ़ंक्शन को अधिभारित करना चाहते हैं तो बाहर निकलता है, अगर वे const हैं या नहीं तो दोनों को मेल खाना चाहिए।

virtual void value() const = 0; 
virtual void value(MyStruct & struct) = 0; 

उपरोक्त कोड इस त्रुटि का कारण होगा। फिक्स 2 से

virtual void value(MyStruct & struct) const = 0; 
संबंधित मुद्दे