probleme mit map iterator



  • ok, ich habe ne Klasse, die eine map enthällt(bitte erstmal noch nicht am stil meckern):

    template<class key,class Allocator>
        class IAllocatorContainer{
            public:
                virtual Allocator& getAllocator(key&)const=0;
                virtual Allocator& insert(key&,Allocator)const=0;
                virtual void erase(key)=0;
                virtual void clear()=0;
        };
    
    template<class key,class Allocator=Virtual::Allocator<char> >
        class AllocatorContainer:public IAllocatorContainer<key,Allocator>{
            private:
                std::map<key,Allocator> Container;
            public:
                Allocator& getAllocator(key& Key)const{
                    std::map<key,Allocator>::iterator pos=Container.find(Key);//da gibts problem
                    if(pos==Container.end()){
                        //Fixme: exception
                    }
                    return pos->second;
                }
                Allocator& insert(key& Key,Allocator obj)const{
                    Container.insert(std::pair<key,Allocator>(Key,obj));
                    std::map<key,Allocator>::iterator pos=Container.find(Key);//da auch
                    return pos->second;
                }
                void erase(key Key){
                    Container.erase(Container.find(Key));
                }
                void clear(){
                    Container.clear();
                }
        };
    

    so, die klasse wird bei mir 2mal erstellt:

    AllocatorContainer<float,float> b;//als test
    AllocatorContainer<std::string,Texture<PDIRECT3DCUBETEXTURE9,CreateCubeTexture> > CubeTextures//innerhalb einer Klasse
    

    so, bei dem test erhalte ich 2 fehler, dass der compiler die 2 typen nicht konvertieren kann([C++ Error] Virtualfile.h(98): E2034 Cannot convert '_STL::_Rb_tree_iterator<_STL::pair<const float,float>,_STL::_Const_traits<_STL::pair<const float,float> > >' to '_STL::_Rb_tree_iterator<_STL::pair<const float,float>,_STL::_Nonconst_traits<_STL::pair<const float,float> > >')
    beim 2. genau das gleiche.
    so, wenn ich nun mal testweise das Interface nicht mehr vererbe, verschwindet der fehler beim float, aber beim andren bleibts da(bzw da verschwindet ein fehler, und zwar der der zur 2. funktion welche einen iterator benutzt gehört).
    wenn ich aber mit vererbten interface einfach nur die inhalte der beiden Funktionen ausklammere(also in kommentartags setze) verschwinden alle fehler,das interface scheint also korrekt zu sein.
    nun frag ich mich doch, wo ich den dummen fehler gemacht hab, is wahrscheinlich wieder sowas, wo ich mit dem kopf gegen die tischkante sause, weils so dumm ist^^

    //edit tzz hab grad ne halbe stunde drüber gebrütet, und kaum nerv ich euch hier mit dem thread, fällt mir auf, dass "const" in den beiden funktionen absolut überflüssig ist-und das war dann auch des rätsels lösung.
    ok,wenn ihr wollt,könnt ihr mich nun geißeln, indem ihr den stil auseinanderpflückt 🙄



  • ok,wenn ihr wollt,könnt ihr mich nun geißeln, indem ihr den stil auseinanderpflückt

    Der ist doch nicht so schlecht aber wenn du darauf bestehst 😮 dann fang ich mal an 😃 :
    Es gibt keine virtuelen Destruktoren

    template<class key,class Allocator
    

    Was ist das den? Ein Type wird groß geschrieben der andere klein. Völlig uneinheitlich.

    Den Rest lasse ich für andere 🤡



  • ok,wenn ihr wollt,könnt ihr mich nun geißeln, indem ihr den stil auseinanderpflückt

    Der ist doch nicht so schlecht aber wenn du darauf bestehst 😮

    von profis lernen 😃

    dann fang ich mal an 😃 :
    Es gibt keine virtuelen Destruktoren

    erledigt

    template<class key,class Allocator
    

    Was ist das den? Ein Type wird groß geschrieben der andere klein. Völlig uneinheitlich.

    hat en bissl länger gedauert als das erste, aber habs auch erledigt 😉

    Den Rest lasse ich für andere 🤡

    😃



  • nichts weiter dran auszusetzen?
    hab ich etwa schon soviel gelernt? 😮


Anmelden zum Antworten