operator< not implemented in Type



  • mein compiler mag mich heute net.
    also, ich hab heute ne große Klasse mit ner map gecodet, als sortier typ musste ich eine dummy-struktur nehmen, die als platzhalter für eine andere struktur dienen soll, die erst später gemacht wird.
    Als einzige methode hat die struktur einen < operator der immer true zurückliefert,damit ich die Klasse wenigstens anständig debuggen kann, bis der rest fertig ist.

    so sieht die dummy struktur aus:

    struct EffectDescription{
        bool operator<(EffectDescription a){
            return true;
        }
    };
    

    nun benutzt ich die struktur in der map, und was ist? der compiler meckert, weil die struktur keinen < operator haben soll.
    Ich hab schon versucht den operator an andere stellen zu packen, kein erfolg,der compiler beharrt darauf, dass die structur keinen overloaded operator hat.

    falls es doch an der methode liegen sollte, in der der fehler auftritt, dann kommt sie hier(sorry, dass sie etwas unübersichtlich ist).

    IBuffer* operator+=(IBuffer* buffer){
                    if(buffer!=this){
                        std::map<Effect::EffectDescription,std::list<IBuffer*> >::const_iterator buffer_map;
                        for(buffer_map=buffer->getTree()->begin();buffer_map!=buffer->getTree()->end();++buffer_map){
                            if(Tree.find(buffer_map->first)!=Tree.end()){
                                std::list<IBuffer*> buffer_list=buffer_map->second;
                                Tree.find(buffer_map->first)->second.insert(Tree.find(buffer_map->first)->second.end(),buffer_list.begin(),buffer_list.end());
                            }
                            else
                            {
                                Tree.insert(std::pair<Effect::EffectDescription,std::list<IBuffer*> >(buffer_map->first,buffer_map->second));
                            }
                        }
                    }
                    return this;
                }
    


  • struct EffectDescription
    {
    	bool operator<(const EffectDescription&) const
    	{
    		return true;
    	}
    };
    
    //oder für die unzufriedenen
    
    bool operator<(const EffectDescription&, const EffectDescription&)
    {
    	return true;
    }
    


  • klasse, das const hat mir ne halbe stunde sucherei eingebracht-.-

    oder anders formuliert: in der tiefen verschachtelung meiner funktion hab ich mich im schlaf zurechtgefunden,ein const hat mich dann gekillt-.-



  • So eine unlogische Sortierung entspricht aber AFAIK nicht den Anforderungen der STL-Container und hat bei mir schon zu lustigen Crashes geführt.



  • Warum sollte es deswegen crashen? Dann dauert das Suchen/Einfügen doch nur länger.



  • otze schrieb:

    mein compiler mag mich heute net.
    also, ich hab heute ne große Klasse mit ner map gecodet, als sortier typ musste ich eine dummy-struktur nehmen, die als platzhalter für eine andere struktur dienen soll, die erst später gemacht wird.
    Als einzige methode hat die struktur einen < operator der immer true zurückliefert,damit ich die Klasse wenigstens anständig debuggen kann, bis der rest fertig ist.

    so sieht die dummy struktur aus:

    struct EffectDescription{
        bool operator<(EffectDescription a){
            return true;
        }
    };
    

    nun benutzt ich die struktur in der map, und was ist? der compiler meckert, weil die struktur keinen < operator haben soll.
    Ich hab schon versucht den operator an andere stellen zu packen, kein erfolg,der compiler beharrt darauf, dass die structur keinen overloaded operator hat.

    falls es doch an der methode liegen sollte, in der der fehler auftritt, dann kommt sie hier(sorry, dass sie etwas unübersichtlich ist).

    IBuffer* operator+=(IBuffer* buffer){
                    if(buffer!=this){
                        std::map<Effect::EffectDescription,std::list<IBuffer*> >::const_iterator buffer_map;
                        for(buffer_map=buffer->getTree()->begin();buffer_map!=buffer->getTree()->end();++buffer_map){
                            if(Tree.find(buffer_map->first)!=Tree.end()){
                                std::list<IBuffer*> buffer_list=buffer_map->second;
                                Tree.find(buffer_map->first)->second.insert(Tree.find(buffer_map->first)->second.end(),buffer_list.begin(),buffer_list.end());
                            }
                            else
                            {
                                Tree.insert(std::pair<Effect::EffectDescription,std::list<IBuffer*> >(buffer_map->first,buffer_map->second));
                            }
                        }
                    }
                    return this;
                }
    

    Dein Code ist Schrott.



  • operator void schrieb:

    So eine unlogische Sortierung entspricht aber AFAIK nicht den Anforderungen der STL-Container und hat bei mir schon zu lustigen Crashes geführt.

    was kann ich dafür, dass die stl container keine sortierung kennen, die gleiches zu gleichen packen kann, und gleichzeitig noch in der lage ist, das sinnvoll aufzulösen?


Anmelden zum Antworten