CList zurückgeben?



  • Hi,

    ich habe folgendes Problem. Ich habe eine folgende Datenstruktur:
    Klasse A als CList<A,A>
    diese Klasse A enthält eine weitere Liste CList<float, float>
    Um von ausserhalb auf die Elemente der float-Liste zugreifen zu können, dachte ich mir, mach ich in A eine Methode CList<float, float> getFloats();, damit ich dann eben die Float-liste auch von ausserhalb durchsuchen kann.

    Nun sagt mir der Compiler aber:
    C:\BattBackUp\Batterie.cpp(99) : error C2558: class 'CList<float,float>' : Kein Kopierkonstruktor verfuegbar

    Was muss ich machen, um die Liste zurückgeben zu können?



  • Versuch mal als Referenz:

    CList<float, float>& getFloats();
    


  • Danke, nun meckert er nicht mehr. Obs klappt, kann ich aber leider nicht testen, da CList keinen =-Operator hat 😞

    CBatterie::CBatterie(CString sSachNr, CList<float,float> fKapazi, CString sStrom)
    {
    	m_sSachnummer = sSachNr;
    	m_fKapazitaet = fKapazi;
    	m_sStromkurve = sStrom;
    }
    

    bringt deshalb
    C:\BattBackUp\Batterie.cpp(50) : error C2582: 'CList<float,float>' : 'Operator =' ist nicht verfuegbar



  • Schlimmstenfalls musst du auf Zeiger umsteigen oder eine eigene Listenklasse machen, der du dann das gewünschte spendierst.



  • Hä ? Auch auf die Gefahr hin, dass ich jetzt total daneben liege, aber irgendwie kapiere ich das hier nicht:
    Das hier:
    CList<float, float> irgendwas;
    ist doch eine Liste, die float Werte enthält, oder ? Dann müsste deine angesprochene Methode doch wohl float zurückgeben und nicht CList<float, float>. Also
    float getFloats();
    statt
    CList<float, float> getFloats();
    und innerhalb von getFloats() müsste mit GetAt(...) auf die Elemente der Liste zugegriffen werden.

    Und zu der Fehlermeldung: ...da CList keinen =-Operator hat
    So
    m_fKapazitaet = fKapazi;
    weist du m_fKapazitaet die komplette Liste zu, da ja fKapazi vom Typ CList<float,float> ist.
    Wenn du einen Wert aus der Liste willst sollte das doch eher so gehen
    fKapazi.GetAt(nIndex);



  • ich wollte ncht nur einen wert aus der liste zurückgeben, sondern eben die gesamte liste. und wenn ich den construktur aufrufe, muss er auch die gesamte liste übergeben, da man, wie ich es sehe, bei CMap(ich erstelle später von CBAtteries, worum es hier geht, ein CMap) später keine Einträge mehr editieren kann und somit die Daten beim Zeitpunkt der übergabe "komplett" sein müssen.
    Aber habe es hingekriegt:

    CBatterie::CBatterie(CString sSachNr, float fKapazi, CList<float,float>& fStrom)
    {
    	m_sSachnummer = sSachNr;
    	m_fKapazitaet = fKapazi;
    
    	POSITION pos = fStrom.GetHeadPosition();
    	m_fStromkurve.AddHead(fStrom.GetNext(pos));
    	while (pos != NULL)
    		m_fStromkurve.AddTail(fStrom.GetNext(pos));
    }
    

Anmelden zum Antworten