Thread View: be.comp.programming
3 messages
3 total messages
Started by astone
Fri, 08 Nov 2002 10:59
[C++] array verdubbelen in grootte
Author: astone
Date: Fri, 08 Nov 2002 10:59
Date: Fri, 08 Nov 2002 10:59
36 lines
1920 bytes
1920 bytes
In een poging een eigen template 'rij' te schrijven ben ik op een
probleem gestoten. Om een of andere reden slaag ik er niet in een array
te doen verdubbelen in grootte. het betreft dit stuk code :
template <class Element>
void rij<Element>::verdubbelArraygrootte()
{
arraygrootte*=2;
Element nieuwe_array[arraygrootte];
for (int i=0; i<aantal_elementen; i++)
{
nieuwe_array[i] = elementen[i];
}
delete [] elementen;
elementen = nieuwe_array;
}
elementen[] is als volgt geinitialiseerd: Element elementen[100];
Op de laatste regel geeft gcc mij steeds de volgende melding
wanneer ik probeer te compilen met rij<int> :
incompatible types in assignment of `int[((rij<int>::arraygrootte - 1) +
1)]' to `int[100]'
Kan iemand me helpen en eventueel ook uitleggen waarom dit niet
werkt? Het zal waarschijnlijk iets erg eenvoudigs zijn, maar
ik vind het echt niet.
Wie de rest van de code wil zien, kan terecht op
http://www.mooo.be/test/code.txt
Alvast bedankt
dk
Re: [C++] array verdubbelen in grootte
Author: Slayerke
Date: Fri, 08 Nov 2002 12:48
Date: Fri, 08 Nov 2002 12:48
46 lines
2855 bytes
2855 bytes
astone wrote:
> In een poging een eigen template 'rij' te schrijven ben ik op een
> probleem gestoten. Om een of andere reden slaag ik er niet in een array
> te doen verdubbelen in grootte. het betreft dit stuk code :
>
> template <class Element>
> void rij<Element>::verdubbelArraygrootte()
> {
> arraygrootte*=2;
> Element nieuwe_array[arraygrootte];
> for (int i=0; i<aantal_elementen; i++)
> {
> nieuwe_array[i] = elementen[i];
> }
> delete [] elementen;
> elementen = nieuwe_array;
> }
>
> elementen[] is als volgt geinitialiseerd: Element elementen[100];
> Op de laatste regel geeft gcc mij steeds de volgende melding
> wanneer ik probeer te compilen met rij<int> :
>
> incompatible types in assignment of `int[((rij<int>::arraygrootte - 1) +
> 1)]' to `int[100]'
>
> Kan iemand me helpen en eventueel ook uitleggen waarom dit niet
> werkt? Het zal waarschijnlijk iets erg eenvoudigs zijn, maar
> ik vind het echt niet.
>
> Wie de rest van de code wil zien, kan terecht op
> http://www.mooo.be/test/code.txt
>
>
Een variabele van het type array is een constant pointer, daar kun je geen
nieuwe waarden aan geven. Je doet er beter aan gewoon een pointer te
gebruiken:
Element* elementen=new Element[100];
In je destructor dan wel geen delete[] elementen; vergeten.
Een array moet je ook niet vrijgeven, die wordt automatisch vrijgegeven, dus
je moet in die code die je gebruikt om te kopieren ook met pointers werken
en via de new-operator, anders ga je een pointer naar een vrijgegeven blok
geheugen teruggeven, wat gaat resulteren in garbage of segfaults.
--
Groeten,
Slayerke
Re: [C++] array verdubbelen in grootte
Author: astone
Date: Fri, 08 Nov 2002 15:09
Date: Fri, 08 Nov 2002 15:09
18 lines
1958 bytes
1958 bytes
In article <moOy9.10704$Nd.3263@afrodite.telenet-ops.be>, slayerkenospammer@slayerke.co.uk says... > astone wrote: > > Kan iemand me helpen en eventueel ook uitleggen waarom dit niet > > werkt? Het zal waarschijnlijk iets erg eenvoudigs zijn, maar > > ik vind het echt niet. > > > Een variabele van het type array is een constant pointer, daar kun je geen > nieuwe waarden aan geven. Je doet er beter aan gewoon een pointer te > gebruiken: > Element* elementen=new Element[100]; > In je destructor dan wel geen delete[] elementen; vergeten. > Een array moet je ook niet vrijgeven, die wordt automatisch vrijgegeven, dus > je moet in die code die je gebruikt om te kopieren ook met pointers werken > en via de new-operator, anders ga je een pointer naar een vrijgegeven blok > geheugen teruggeven, wat gaat resulteren in garbage of segfaults. bedankt, nu werkt het :)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads