Toon posts:

[c++] pointer to array of pointers to object

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een pointer die wijst naar een array van pointers die ieder wijzen naar een object.

das geen probleem.. de pointer staat in het object gedeclareerd als

Werknemer is dus de class naam.
code:
1
Werknemer **data;


vervolgens in de constructor:
code:
1
data(new Werknemer * [size])


en om de array uit te breiden in een memberfunctie
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Manager::geeftLeidingAan(Werknemer& gla)
{
    Werknemer** data2=new Werknemer* [size+1];
        for(int i(0);i<size;i++)
        {
                data2[i]=data[i];
        }

        data2[size] = &gla;
        delete[] data;
        size++;
        data = new Werknemer * [size];
        data = data2;
        delete[] data2;
        return;
}


dit lijkt opzich nog goed te gaan... maar als ik een member wil aanspreken van het object waar de pointer in de array van pointers naar wijst.

dus ik doe dit:
code:
1
 data[i]->memberfunctie();

dan crashed hij

hoe roep ik die memberfunctie aan? of gaat er al wat fout in het eerdere deel?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap dit stukje niet helemaal (trouwens, gebruik [code=c++]...[/code] voor syntax highlighting :))

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Manager::geeftLeidingAan(Werknemer& gla)
{
    Werknemer** data2=new Werknemer* [size+1];
        for(int i(0);i<size;i++)
        {
                data2[i]=data[i];
        }

        data2[size] = &gla;
        delete[] data;
        size++;
        data = new Werknemer * [size];
        data = data2;
        delete[] data2;
        return;
}


Eerst maak je een nieuwe array aan, en kopieer je alle waardes. Aan het eind voeg je het nieuwe element eraan toe. Je delete de oude array en de nieuwe array bewaar je in data. Vervolgens maak je weer een nieuwe array aan, zet je weer in data (je aangepaste array ben je nu kwijt), en je delete data2 (die gelijk is aan data). Data wijst dus nu naar een stukje al vrijgegeven geheugen

Volgens mij moet dat hele stuk vanaf regel 12 gewoon weg :)

.edit: welkom op GoT trouwens :)
Je bent minder nieuw dan ik aanvankelijk dacht, check je mail zo even :)

[ Voor 6% gewijzigd door .oisyn op 19-03-2004 02:03 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Verder kan je beter niet om een reference vragen in je functie, en daar dan het adres van opslaan. Het lijkt erop of je functie nu ook met objecten op de stack om kan gaan (een kopie maakt oid)

Bv. dit zou fout gaan:

C++:
1
2
3
4
5
6
7
8
9
10
void blaat(Manager& m) {
   Werknemer a;
   m.geeftLeidingAan(a);
 } // a wordt hier gewist, pointer is niet meer geldig

void start() {
   Manager m;
   blaat(m);
   m.getWerknemer()->member(); // crash
}


Als je om een pointer vraagt is het duidelijker dat dit niet mag... Ok misschien zeur ik een beetje :)

Verwijderd

Topicstarter
ik wil de array met pointers met 1 pointer verlengen.

ik maak dus eerst een nieuwe array van pointers aan.(dynamisch) vervolgens zet ik alle pointers over, en vul ik de laatste pointer in.

dan verwijder ik de oude dynamische array, en laat ik de data pointer naar de nieuwe array wijzen..

en ik zie nu net een enorme fout!! |:( |:(

ff aan knutselen

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoijar: Hmmja, het is een beetje een code convention natuurlijk. Persoonlijk zie ik references meer als dingen die niet null mogen zijn: dat mag een pointer uiteraard wel

raceeend123: waarom maak je eigenlijk geen gebruik van een std::vector?

[ Voor 23% gewijzigd door .oisyn op 19-03-2004 02:18 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Lees ook dit eens door, dat scheelt een stuk werk... (std::vector)

http://www.codeguru.com/C...mfc/stl/article.php/c4027

@oisyn: ja heb je gelijk in, het is conventie. Hmmm zelfde gedachte over vector? :)

[ Voor 25% gewijzigd door Zoijar op 19-03-2004 02:21 ]


Verwijderd

Topicstarter
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Manager::geeftLeidingAan(Werknemer& gla)
{
    Werknemer** data2=new Werknemer* [size+1];
        for(int i(0);i<size;i++)
        {
                data2[i]=data[i];
        }

        data2[size] = &gla;
        delete[] data;
        size++;
        data = data2;
        return;
}


regel 12 en 14 moesten idd weg... tnx..


ik had een array die rond los ging zweeven, lekker geheugen lek.
en aan het eind gooi ik de array weg waar de pointer nu naar wijst |:( stom dus

maar dat was dus idd het probleem. het werkt nu gewoon.

Verwijderd

Topicstarter
.oisyn schreef op 19 maart 2004 @ 02:17:
raceeend123: waarom maak je eigenlijk geen gebruik van een std::vector?
nou omdat.... euhm.... ja goeie...... ik denk dat het komt omdat het al tegen 2'en is en ik nog ff snel een paar stukkies in elkaar aan het gooien ben. moet ik ook nie doen. :9 ja ga maar ff vectortje er in gooien.
Pagina: 1