🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
10 messages
10 total messages Started by astone Fri, 08 Nov 2002 10:58
[C++]
#6881
Author: astone
Date: Fri, 08 Nov 2002 10:58
36 lines
1910 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++]
#6885
Author: Dominique Devriese
Date: Fri, 08 Nov 2002 14:59
78 lines
3912 bytes
astone  writes:

> 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;
> }

hallo,

je moet die code eens herlezen, en goed beseffen wat je aan het doen
bent.

Hier is een klein equivalent met int's in plaats van arrays, en zonder
templates:

class integer
{
        int oude_int;
  public:
        void verdubbel();
};

void integer::verdubbel()
{
        int nieuwe_int;
        nieuwe_int = oude_int;
        &oude_int = &nieuwe_int;
};

Ik hoop dat je begrijpt wat je allemaal fout doet:

1.  een array is intern wel een pointer, en op sommige momenten kan je
    het gebruiken als zodanig, maar je kan de interne pointer _niet_
    naar een andere array laten wijzen.  Als je dat wil moet je
    rechtstreeks met pointers werken...
2.  nieuwe_array is een array die wordt gecreerd waar hij gedeclareerd
    wordt, en die verdwijnt wanneer hij uit scope verdwijnt.  Als je
    hem daarna nog probeert te gebruiken, heb je gegarandeerd een
    segmentatiefout.. ( nu ja, je compiler mag technisch gezien ook
    code genereren die een maanraket lanceert, want het is
    "ongedefinieerd" gedrag... ).  Als je wil dat je de array erna nog
    wilt gebruiken, moet je hem "dynamisch" alloceren, dwz. met new.
3.  elementen is ook statisch gealloceerd.  Die hoort namelijk bij de
    klasse rij.  Als je hem probeert te delete [] n, heb je weer iets
    ongedefinieerd.  Vuistregel: delete _enkel_ dingen die je zelf met
    new gealloceerd hebt.

> 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]'

kmoet wel zeggen dat de error niet erg duidelijk is, maar toch.. ;)

> 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

misschien toch dat hoofdstuk over geheugen-allocatie eens herlezen in
je C++ boek ? ;)  
sjuus
domi


-- 
Don't you feel more like you do now than you did when you came in?
Re: [C++]
#6887
Author: astone
Date: Fri, 08 Nov 2002 19:21
20 lines
1654 bytes
In article <877kfohztt.fsf@appel.kotnet.org>, 
dominique.devriese@student.kuleuven.ac.be says...
<snip>
> je moet die code eens herlezen, en goed beseffen wat je aan het doen
> bent.

*bloos* ik ben nieuw in c++, viel het op? in java heb ik die problemen
namelijk helemaal niet...

> Ik hoop dat je begrijpt wat je allemaal fout doet

ik heb je uitleg gelezen en herlezen en het begint stilaan te dagen.
ik had een voorlopig werkende oplossing gevonden maar ik ga het geheel
toch eens helemaal herschrijven denk ik :) bedankt voor de uitleg!

p.s. ik dacht dat ik mijn originele thread met te korte titel gecanceld
had, maar blijkbaar kwam hij er toch door...


dk
Re: [C++]
#6888
Author: Dominique Devriese
Date: Fri, 08 Nov 2002 22:51
23 lines
1859 bytes
astone  writes:

> In article <877kfohztt.fsf@appel.kotnet.org>,
> dominique.devriese@student.kuleuven.ac.be says...  <snip>
>> je moet die code eens herlezen, en goed beseffen wat je aan het
>> doen bent.

> *bloos* ik ben nieuw in c++, viel het op?

om heel eerlijk te zijn, toch wel een beetje ;)
maar uit fouten leer je, he :)

> in java heb ik die
> problemen namelijk helemaal niet...

er zijn nog wel meer dingen die je in Java niet hebt tegenover
C++... De C++ STL is bijvoorbeeld geniaal.

sjuus
domi

-- 
You're almost as happy as you think you are.
Re: [C++]
#6890
Author: KLinZ
Date: Sat, 09 Nov 2002 09:48
18 lines
1674 bytes
Dominique Devriese wrote:
> astone  writes:
>
>> in java heb ik die
>> problemen namelijk helemaal niet...
>
> er zijn nog wel meer dingen die je in Java niet hebt tegenover
> C++... De C++ STL is bijvoorbeeld geniaal.
>

Voor bijna elke STL template is een Java equivalent:

http://java.sun.com/products/jdk/1.2/docs/api/java/util/package-summary.html



--
www.zenobits.com
Re: [C++]
#6893
Author: Slayerke
Date: Sat, 09 Nov 2002 12:59
28 lines
2021 bytes
KLinZ wrote:

> Dominique Devriese wrote:
>> astone  writes:
>>
>>> in java heb ik die
>>> problemen namelijk helemaal niet...
>>
>> er zijn nog wel meer dingen die je in Java niet hebt tegenover
>> C++... De C++ STL is bijvoorbeeld geniaal.
>>
> 
> Voor bijna elke STL template is een Java equivalent:
> 
> 
http://java.sun.com/products/jdk/1.2/docs/api/java/util/package-summary.html
> 
> 
> 
templates in java dan ofzo? IMO zit dat niet in de standaard 
java-compiler(en syntax).
Het is wel zo dat voor zo goed als elke aangeboden template(en class) in de 
STL er een equivalent bestaat als class in java, en aangezien in java zo 
goed als alles afgeleid is van Object kun je die classen met bijna alles 
gebruiken, maar toch vind ik templates flexibeler :-)
-- 
Groeten,
Slayerke
Re: [C++]
#6895
Author: Dominique Devriese
Date: Sat, 09 Nov 2002 13:05
22 lines
1824 bytes
klinz  writes:

> Dominique Devriese wrote:
>> astone writes:
>>
>>> in java heb ik die problemen namelijk helemaal niet...
>>
>> er zijn nog wel meer dingen die je in Java niet hebt tegenover
>> C++... De C++ STL is bijvoorbeeld geniaal.
>>

> Voor bijna elke STL template is een Java equivalent:

> http://java.sun.com/products/jdk/1.2/docs/api/java/util/package-summary.html

Al ooit geprobeerd om java.util.Vector op een serieuze manier te
gebruiken ?
sjuus
domi

-- 
Celebrate Hannibal Day this year.  Take an elephant to lunch.
Re: [C++]
#6896
Author: KLinZ
Date: Sat, 09 Nov 2002 14:49
24 lines
1857 bytes
Dominique Devriese wrote:
> klinz  writes:
> 
>> Dominique Devriese wrote:
>>> astone writes:
>>> 
>>>> in java heb ik die problemen namelijk helemaal niet...
>>> 
>>> er zijn nog wel meer dingen die je in Java niet hebt tegenover
>>> C++... De C++ STL is bijvoorbeeld geniaal.
>>> 
> 
>> Voor bijna elke STL template is een Java equivalent: 
>> http://java.sun.com/products/jdk/1.2/docs/api/java/util/package-
>> summary.html 
> 
> Al ooit geprobeerd om java.util.Vector op een serieuze manier te
> gebruiken ?


Yep.

-- 
www.zenobits.com
Re: [C++]
#6897
Author: Koen Hautekeete
Date: Sat, 09 Nov 2002 14:50
15 lines
1579 bytes
On 09 Nov 2002 14:05:44 +0100, Dominique Devriese
<dominique.devriese@student.kuleuven.ac.be> wrote:

[ ... ]

>Al ooit geprobeerd om java.util.Vector op een serieuze manier te
>gebruiken ?

Die wordt (bijna) niet meer gebruikt.
Zie bvb
<url:http://java.sun.com/docs/books/tutorial/collections/index.html>. 

mvg

Koen Hautekeete
Re: [C++]
#6899
Author: Dominique Devriese
Date: Sat, 09 Nov 2002 16:39
33 lines
2446 bytes
Koen Hautekeete writes:

> On 09 Nov 2002 14:05:44 +0100, Dominique Devriese
> <dominique.devriese@student.kuleuven.ac.be> wrote:

> [ ... ]

>> Al ooit geprobeerd om java.util.Vector op een serieuze manier te
>> gebruiken ?

> Die wordt (bijna) niet meer gebruikt.  Zie bvb
>
> <url:http://java.sun.com/docs/books/tutorial/collections/index.html>.

Hm.. die nieuwe dingen lijken al iets beter ( kortere namen voor
elementAt() e.d. ), maar ze zijn nog altijd heel mager tgov. de C++
alternatieven, hoor..

Ten eerste is de C++ manier sneller door het gebruik van templates
ipv. polymorfisme, hij is ook handiger door het gebruik van operator
overloading, en het vermijden van de casts die je in java altijd moet
doen met Vectors e.d.  En dan zwijg ik nog over de hele collectie van
algoritmen in C++ die imho toch nog wel heel wat krachtiger zijn dan
de java alternatieven, hoor..

nu ja, tzal wel persoonlijk zijn, zeker.. :)
sjuus
domi

-- 
If one cannot enjoy reading a book over and over again, there is no use
in reading it at all.
		-- Oscar Wilde
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