Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wieder mal Problem mit STL-Liste

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.07.2006, 23:41 Uhr
mase



Hallo!
Ich hab wieder einmal ein Problem mir einer STL-Liste.
Ich hab folgende Klassendeklaration:

C++:
#include<string>
#include<dirent.h>
#include<list>
#include<iostream>
#include"bomb.h"

typedef std::list<Bomb>BombDirList;



class BombDir
{
public:
    BombDir(std::string _BombPath):BombPath(_BombPath)
    {
        AllBombsList=new BombDirList;
    }

    ~BombDir()
    {
        delete AllBombsList;
    }

    bool readBombDir();

    void addBombEntry(std::string _BombId,std::string _BombName,std::string _BombColour,unsigned int _BombSize,unsigned int _BombRaiseTime,unsigned int _BombClimbHeight,unsigned int _BombExplodeTime,std::string _BombPicture,std::string _BombMovie,unsigned int _Pos);

    //    bool delBombEntry(std::string _DirName);

    BombDirList* getBombs() const; //Soll einen Zeiger auf die Liste zurückliefern

private:
    BombDir() //Privat, da nur mit Parameter initialisiert werden soll
    {}

    std::string BombPath;

    BombDirList* AllBombsList;

    BombDirList::iterator Iter;

    void MoveIter(unsigned int);
};


Dann folgende Implementierung:

C++:
#include"bombdir.h"



using std::string;
using std::fstream;
using std::ios_base;
using std::list;



bool BombDir::readBombDir()
{
    AllBombsList->clear();

//Hier spar ich mir jetzt etwas Code. Es werden lediglich die Parameter für BombDir::addBombEntry erfasst.
//Die werden aus einer Datei gelesen. Das funktioniert auch.
//_Pos ist die gewünschte Position in der Liste.

addBombEntry(tempBombId,tempBombName,tempBombColour,tempBombSize,tempBombRaiseTime,tempBombClimbHeight,tempBombExplodeTime,tempBombPicture,tempBombMovie,Pos);
    return true;
}



void BombDir::addBombEntry(string _BombId,string _BombName,string _BombColour,unsigned int _BombSize,unsigned int _BombRaiseTime,unsigned int _BombClimbHeight,unsigned int _BombExplodeTime,string _BombPicture,string _BombMovie,unsigned int _Pos)
{
    //Create a temporary Bomb object and fill it with the given parameters
    Bomb* tempBomb=new Bomb;
    tempBomb->setBombId(_BombId);
    tempBomb->setBombName(_BombName);
    tempBomb->setBombColour(_BombColour);
    tempBomb->setBombSize(_BombSize);
    tempBomb->setBombRaiseTime(_BombRaiseTime);
    tempBomb->setBombClimbHeight(_BombClimbHeight);
    tempBomb->setBombExplodeTime(_BombExplodeTime);
    tempBomb->setBombPicture(_BombPicture);
    tempBomb->setBombMovie(_BombMovie);

    //Move iterator to the given position
    MoveIter(_Pos);

    //Insert temporary BombLaunch object into the list and delete object
    AllBombsList->insert(Iter,*tempBomb); //Dieser Aufruf bringt den Fehler

    delete tempBomb;
    return;
}



BombDirList* BombDir::getBombs() const
{
    return AllBombsList;
}



void BombDir::MoveIter(unsigned int _Pos)
{
    Iter=AllBombsList->begin();
    for(unsigned int PosCount=1;PosCount!=_Pos;PosCount++)
    {
        Iter++;
    }
    return;
}


Der Aufruf AllBombsList->insert(Iter,*tempBomb); bringt eine Fehlerflut.
Die ersten Zeilen:

Code:
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h: In copy constructor »std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)«:
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd:55: instantiated from »void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = Bomb]«
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:451: instantiated from »std::_List_node<_Tp>* std::list<_Tp, _Alloc>::_M_create_node(const _Tp&) [with _Tp = Bomb, _Alloc = std::allocator<Bomb>]«
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/list.tcc:87: instantiated from »typename std::list<_Tp, _Alloc>::iterator std::list<_Tp, _Alloc>::insert(std::_List_iterator<_Tp>, const _Tp&) [with _Tp = Bomb, _Alloc = std::allocator<Bomb>]«
/home/mase/pyromaster/src/bombdir.cpp:141: instantiated from here


Es sollen Objekte der Klasse Bomb in der Liste gespeichert werden.
Die Methode void BombDir::MoveIter(unsigned int _Pos) soll den
Iterator auf die gewünschte Position setzen.
Kommentiere ich den Aufruf AllBombsList->insert(Iter,*tempBomb); aus, dann
kompiliert's.
In einer anderen Klasse des Programms bin ich genauso vorgegangen, nur da
geht's. Dort werden lediglich Objekte einer anderen Klasse gespeichert.
Sonst ist alles gleich. Die Liste hat noch einen anderen Namen, sonst nichts.
Weiss jemand, wo der Fehler liegt?
--
May the force be with us!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.08.2006, 10:33 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
anscheinend gibt es irgendein Problem ne Kopie deines Bomb Objekts anzulegen.
Wie sieht denn bomb.h und .cpp aus?

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.08.2006, 17:59 Uhr
~mase
Gast


Ich hab's lösen können. Ich hatte einen fstream Member in der Bombklasse.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: