के साथ कस्टम डिलीटर का उपयोग करके मैं एक कस्टम डिलीटर के साथ std :: shared_ptr का उपयोग करने का तरीका जानने का प्रयास कर रहा हूं। विशेष रूप से, मैं इसका उपयोग एसडीएल_Surface के साथ कर रहा हूं:std :: shared_ptr
std::shared_ptr<SDL_Surface>(SDL_LoadBMP(....),SDL_FreeSurface);
जो संकलित करता है और ठीक चलाता है। हालांकि, मैं अपना खुद का हटाना चाहता हूं और ऐसा नहीं कर सकता कि ऐसा कैसे किया जाए। SDL_FreeSurface के लिए प्रलेखन यहाँ पाया जाता है:
http://sdl.beuc.net/sdl.wiki/SDL_FreeSurface
जिसमें मैं SDL_FreeSurface खोजने के रूप में घोषित किया जाता है:
void SDL_FreeSurface(SDL_Surface* surface);
एक परीक्षण के रूप में, और उस जानकारी को देखते हुए, मैंने कोशिश की निम्नलिखित समारोह:
void DeleteSurface(SDL_Surface* surface)
{
std::cout << "Deleting surface\n";
SDL_FreeSurface(surface);
}
हालांकि, जी के साथ ++ संकलन मुझे निम्न त्रुटि देता है:
error: no matching function for call to 'std::shared_ptr<SDL_Surface>::shared_ptr(SDL_Surface*, <unresolved overloaded function type>)'
मैंने gcc std :: shared_ptr कार्यान्वयन के लिए gnu दस्तावेज़ को देखा है लेकिन इसका अधिक अर्थ नहीं उठा सकता है। मैं क्या गलत कर रहा हूं?
संपादित करें: मैंने तब से समस्या को कम कर दिया है, लेकिन ऊपर मूल प्रश्न छोड़ देगा। जैसा कि ऊपर DeleteSurface
के कार्यान्वयन के साथ
class Game {
public:
/* various functions */
private:
void DeleteSurface(SDL_Surface* surface);
bool CacheImages();
std::vector<std::shared_ptr<SDL_Surface> > mCachedImages;
/* various member variables and other functions */
}
, और जैसा कि CacheImages()
के कार्यान्वयन:
bool CacheImages()
{
mCachedImages.push_back(std::shared_ptr<SDL_Surface>(SDL_LoadBMP(...),DeleteSurface);
return true;
}
क्या मैं था एक खेल वर्ग है, जो अगर मैं इसे एक बुनियादी कार्यान्वयन के लिए नीचे पट्टी, की तरह कुछ था
जो मुझे ऊपर सूचीबद्ध त्रुटि खेल है। हालांकि, अगर मैं DeleteSurface()
Game
कक्षा के बाहर फ़ंक्शन को अन्यथा बदलने के बिना स्थानांतरित करता हूं, तो कोड संकलित करता है। DeleteSurface
फ़ंक्शन Game
क्लास में समस्याएं पैदा करने वाले बारे में क्या है?
आपका उदाहरण मेरे लिए ठीक संकलित करता है। –