Probleme mit list.insert



  • Hi!

    Ich habe 2 Listen und wie die eine komplett an die andere dranhängen:
    equi ist folgendermaßen definiert

    list<Region *> *equi;

    list<Region *>::iterator it = reg->equi->begin();
    int capacity = this->size + reg->size;
    this->equi->insert(this->equi->end(), *(reg->equi)->begin(), *(reg->equi)->end());

    Erhalte folgende Fehlermeldung:
    e:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\list(574) : error C2664: 'void std::list<_Ty>::_Insert(std::list<_Ty>::iterator,const _Ty & )': Konvertierung des Parameters 2 von 'RegionSegmentation::Region' in 'RegionSegmentation::Region *const & ' nicht möglich
    with
    [
    _Ty=RegionSegmentation::Region *
    ]
    Ursache: Konvertierung von 'RegionSegmentation::Region' in 'RegionSegmentation::Region *const ' nicht möglich
    Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    e:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\list(537): Siehe Verweis auf Instanziierung der kompilierten Funktionsvorlage 'void std::list<_Ty>::_Insert<_Iter>(std::list<_Ty>::iterator,_Iter,_Iter,std::forward_iterator_tag)'
    with
    [
    _Ty=RegionSegmentation::Region *,
    _Iter=std::allocator<RegionSegmentation::Region *>::value_type
    ]
    e:\Dokumente und Einstellungen\Jennifer\Eigene Dateien\Visual Studio Projects\backup\2007\vers02_test\test2\test2\Region.cpp(44): Siehe Verweis auf Instanziierung der kompilierten Funktionsvorlage 'void std::list<_Ty>::insert<std::allocator<_Ty>::value_type>(std::list<_Ty>::iterator,_Iter,_Iter)'
    with
    [
    _Ty=RegionSegmentation::Region *,
    _Iter=std::allocator<RegionSegmentation::Region *>::value_type
    ]
    main.cpp

    Wie kann ich das Problem beheben?



  • Anhängen einer Liste an das Ende einer anderen Liste funktioniert wie nachfolgend:

    #include <list>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	list<int> a;
    	a.push_back(1);
    	a.push_back(2);
    	a.push_back(3);
    	a.push_back(4);
    
    	list<int> b;
    	b.push_back(5);
    	b.push_back(6);
    	b.push_back(7);
    	b.push_back(8);
    
    	copy(b.begin(), b.end(), back_inserter(a));
    	for (list<int>::iterator it = a.begin(); it != a.end(); ++it)
    		cout << *it << endl;	
    
    	return 0;
    }
    


  • Danke für die Antwort, aber so geht es auch nicht.
    Mit den Standarddatentypen funktionieren die Sachen ja immer, aber mit eigenen Klassen gibt es Probleme. Ziemlich nervig.



  • Wollte nur sagen, dass es jetzt mit beiden Methoden klappt.
    Hab die kryptische Fehlermeldung, doch noch richtig interpretieren können ;-).


Anmelden zum Antworten