2011-07-10 12 views
11

अरे मैं इस अजीब त्रुटि मिल रही है:कॉन्स्ट बेमेल: 2 भार के 'इस' सूचक के लिए कोई कानूनी रूपांतरण है

error C2663: 'sf::Drawable::SetPosition' : 2 overloads have no legal conversion for 'this' pointer

मुझे लगता है कि यह स्थिरांक बेमेल के साथ कुछ है, लेकिन मैं जहां पता नहीं है , या क्यों। निम्नलिखित कोड में मेरे पास आकार और स्प्राइट्स का वेक्टर है, और जब वेक्टर आकारों में से किसी एक को एक्सेस करने और अपने कार्यों में से किसी एक को कॉल करने का प्रयास करते समय मुझे त्रुटि मिल रही है।

 std::vector<sf::Shape> Shapes; 
     std::vector<sf::Sprite> Sprites; 

    bool AddShape(sf::Shape& S){ 
     Shapes.push_back(S); return true;}; 
    bool AddSprite(sf::Sprite& S){ 
     Sprites.push_back(S); return true;}; 

private: 

virtual void Render(sf::RenderTarget& target) const {     
    for(unsigned short I; I<Shapes.size(); I++){ 
     Shapes[I].SetPosition(
      Shapes[I].GetPosition().x + GetPosition().x, 
      Shapes[I].GetPosition().y + GetPosition().y); 
     target.Draw(Shapes[I]);} 
    for(unsigned short I; I<Sprites.size(); I++){ 
     target.Draw(Sprites[I]);} 

मैं इसे कैसे ठीक कर सकता हूं ??

+0

इसमें क्या रेखा होती है? –

+0

इस प्रश्न का इतना बड़ा स्कोर क्यों है? क्षमा करें, कोई अपराध इरादा नहीं है, लेकिन यह स्पष्ट नहीं है? – Liviu

उत्तर

14

Render पैरामीटर के बाद const के साथ घोषित किया गया है। इसका मतलब है कि यह अपनी वस्तु को नहीं बदलता है। जिसका अर्थ है कि सभी ऑब्जेक्ट के सदस्य चर को Render के भीतर स्थिरांक माना जाता है, क्योंकि उनके राज्य को बदलने का मतलब है वस्तु को बदलना। मान लें कि Shapes एक सदस्य चर है, और SetPosition आकार बदलता है (यानी const के रूप में घोषित नहीं किया गया है), आप इसे const सदस्य फ़ंक्शन के भीतर कॉल नहीं कर सकते हैं।

तो, Render से const हटाएं और आप ठीक होंगे (आप अपने तर्क को ठीक कर सकते हैं, यदि यह स्थिर होना चाहिए)।

+0

वह कॉन्स को हटा नहीं सकता; वह एक बेस क्लास से निकल रहा है जो संभावित रूप से उस कॉन्स को शुरू करने के लिए रखता है। –

+0

@ निकोल बोलास, आप कैसे जानते हैं? ओपी कक्षा के बारे में कुछ नहीं कहता है जिसमें 'रेंडर' है, क्या वह? और यदि वह करता है और मुझे वह याद आया है, तो उसे केवल 'रेंडर' की सामग्री बदलनी होगी। आप 'const' सदस्य फ़ंक्शन के अंदर सदस्य चर को नहीं बदल सकते हैं (जब तक कि आप अपना कोड हैक करना न भूलें और अपने उपयोगकर्ताओं को आश्चर्यचकित न करें)। – eran

+0

मैंने अपनी आखिरी पोस्ट पढ़ी; वह एक एसएफएमएल आकर्षित करने योग्य बना रहा है। –

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