probleme mit zeiger



  • hallo,
    hab eine sehr interresantes problem wollte 2 dim. vector machen sieht so aus

    vector<vector<Cell*>> table;
    konstruktor von GOLModel bekommt übergeben wie gross die tabelle sein soll und packt dann jede x, y koordinaten eine zelle
    und Cell bekommt ein GOLModel und x,y übergeben
    mein problem ist dass ich nacher z.B. für den aufruf
    GOLModel model(5, 5) in der liste nur x = 4, y = 4 hab
    also irgendwie ergibt &Cell(this, x, y) immer die gleiche adresse ????
    aber das kann eigentlich nicht sein
    ich bin echt verwirrt und bin für jede hilfe dankbar

    [cpp]GOLModel::GOLModel(int size_x, int size_y) : size_x(size_x), size_y(size_y)
    {
    	for(int x = 0; x < size_x; x++)
    	{
    		table.push_back(vector<Cell*>(size_y));
    
    		for(int y = 0; y < size_y; y++)
    		{
    			table[x][y] = &Cell(this, x, y);
    		}
    	}
    }
    

    [/cpp]



  • Hallo,

    table[x][y] =  new Cell(this, x, y);
    

    ???

    MfG,

    Probe-Nutzer



  • jaaaaa,
    mit new kann man das machen aber in c++ sollte man es möglichst vermeiden.

    ausserdem mache ich ja mit Cell(this, x, y) eine neue zelle
    ich verstehe nur nicht wieso die zelle immer die gleiche adresse bekommt??



  • muss_ schrieb:

    jaaaaa,
    mit new kann man das machen aber in c++ sollte man es möglichst vermeiden.

    Du musst es so machen, wenn du unbedingt Cell-Zeiger in table haben willst.

    muss_ schrieb:

    ausserdem mache ich ja mit Cell(this, x, y) eine neue zelle

    Ja schon, aber das ist eine temporäre Zelle, die sofort wieder zerstört wird, und dann nutzt dir auch die Adresse (&Cell(this, x, y)) nichts mehr, weil es das Objekt nicht mehr gibt. new verhindert, dass das, auf das der Cell-Zeiger verweist, zerstört wird. Wenn du keine Zeiger verwenden würdest, könntest du in der Tat auf new verzichten:

    vector<vector<Cell >> table;
    ...
            for(int y = 0; y < size_y; y++)
            {
                Cell c(this, x, y);
                table[x][y] = c;
            }
    

    ...

    MfG,

    Probe-Nutzer


Anmelden zum Antworten