Unerklärliche Fehlermeldung bei der Verwendung von Listen :(



  • Hi,

    Ich habe folglenden Code gschrieben:

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    class CRaumschiff
    {
    private:
    	int m_ID;
    
    public:
    	int ShowID ()
    	{
    		return m_ID;
    	}
    
    	CRaumschiff (int ID)
    	{
    		m_ID = ID;
    	}
    };
    
    int main ()
    {
    	//Variables...
    	list<CRaumschiff> lSchiffe;
    	int Anzahl = 0;
    	list<CRaumschiff>::iterator iter;
    	CRaumschiff *Temp = NULL;
    
    	cout << "Wieviele Raumschiffe sollen gebaut werden?" << endl;
    	cin >> Anzahl;
    
    	for(int i=0; i<Anzahl; i++)
    	{
    		Temp = new CRaumschiff(i+1);
    		lSchiffe.push_back (Temp);
    	}
    
    	system ("PAUSE");
    	return 0;
    }
    

    Und bekomme dabei follgende Fehlerausgabe:

    1>------ Erstellen gestartet: Projekt: qqq, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>qq.cpp
    1>c:\documents and settings\x\my documents\visual studio 2008\projects\qqq\qqq\qq.cpp(37) : error C2664: 'std::list<_Ty>::push_back': Konvertierung des Parameters 1 von 'CRaumschiff *' in 'const CRaumschiff &' nicht möglich
    1> with
    1> [
    1> _Ty=CRaumschiff
    1> ]
    1> Ursache: Konvertierung von 'CRaumschiff *' in 'const CRaumschiff' nicht möglich
    1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
    1>Das Buildprotokoll wurde unter "file://c:\Documents and Settings\x\My Documents\Visual Studio 2008\Projects\qqq\qqq\Debug\BuildLog.htm" gespeichert.
    1>qqq - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Ich würde mich über Hilfe freuen 🙂



  • abcd schrieb:

    error C2664: 'std::list<_Ty>::push_back': Konvertierung des Parameters 1 von 'CRaumschiff *' in 'const CRaumschiff &' nicht möglich

    Lies dir diesen Fehler noch mal durch.
    Du hast eine Liste des Typs list<CRaumschiff> nicht vom Typ list<CRaumschiff*> !

    Das gehört aber ins C++, nicht in das MFC-Forum.

    cu André



  • Wenn Du Pointer speichern willst, musst Du die Liste auch entsprechend deklarieren:

    list<CRaumschiff*> lSchiffe;
    

    Auch müssen die mit new allozierten Objekte mit delete wieder freigegeben werden.

    Übrigens wäre C++ das bessere Forum dafür gewesen.

    Simon

    Edit: zu spät.. :-))



  • Steht doch da:

    Konvertierung des Parameters 1 von 'CRaumschiff *' in 'const CRaumschiff &' nicht möglich
    

    Du legst mit new ein 'CRaumschiff *' an, Dein Container nimmt aber nur 'CRaumschiff' auf.

    /e: noch spääääääääääääääää.......


Anmelden zum Antworten