Toon posts:

[C++] CArray probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een boomstructuur van Objecten te maken, maar dit lukt me niet...

Ik heb een klasse Groep:
code:
1
2
3
int id;
CString naam;
CArray<Persoon,Persoon> persoonList;


Hier kan ik zonder probleem een element aan toevoegen:
code:
1
persoonList.Add(Persoon(params));


Ik m'n Document heb ik een CArray van Groepen:
code:
1
CArray<Groep,Groep> groepList;


Wanneer ik hier een element probeer aan toevoegen:
code:
1
groepList.Add(Groep(params));

... dan krijg ik de volgende foutmelding:

error C2664: 'CArray<TYPE,ARG_TYPE>::Add' :
cannot convert parameter 1 from 'Groep' to 'Groep' with
[TYPE=Groep,ARG_TYPE=Groep]

Kan iemand mij hiermee helpen?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Per ongeluk 2 Groep classes gemaakt?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
MSalters schreef op woensdag 01 december 2004 @ 19:21:
Per ongeluk 2 Groep classes gemaakt?
Nope

Verwijderd

Heeft je Groep klasse wel een default constructor?

  • The End
  • Registratie: Maart 2000
  • Laatst online: 21:22

The End

!Beginning

Volgens mij moet je of een copy constructor maken voor Groep of je moet je declaratie veranderen in:
CArray<Groep,Groep&> groepList;

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 19-05 15:46

BoAC

Memento mori

The End schreef op donderdag 02 december 2004 @ 09:36:
Volgens mij moet je of een copy constructor maken voor Groep of je moet je declaratie veranderen in:
CArray<Groep,Groep&> groepList;
Nee want dan kan hij nog steeds geen kopie maken van Groep.persoonList

De TS moet voor zijn Groep de functie CopyElements implementeren ;)
Zie msdn

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Moet het niet als volgt zijn:

C:
1
groepList.Add(new Groep(params));

Hey, I came here to be drugged, electrocuted and probed, not insulted.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 21:22

The End

!Beginning

BoAC schreef op donderdag 02 december 2004 @ 09:42:
[...]

Nee want dan kan hij nog steeds geen kopie maken van Groep.persoonList

De TS moet voor zijn Groep de functie CopyElements implementeren ;)
Zie msdn
Een copy constructor kopieerd toch het hele object? Als daar een persoonList in zit, dan moet die dus ook gekopieerd worden...

En wie zou dan CopyElements aanroepen?

O, ik zie het al; CopyElements wordt alleen gebruikt als je het hele array append of kopieerd..

[ Voor 10% gewijzigd door The End op 02-12-2004 09:55 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
The End schreef op donderdag 02 december 2004 @ 09:50:
[...]


Een copy constructor kopieerd toch het hele object? Als daar een persoonList in zit, dan moet die dus ook gekopieerd worden...

En wie zou dan CopyElements aanroepen?
Klinkt als MFC (....) , dus het framework waarschijnlijk.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Jouw Groep klasse zal van CObject moeten derived moeten zijn, plus dat er een default-constructor aanwezig moet zijn.

Even een quote uit het grote MFC boek:

It's important to include default constructors in classes you use with CArray and other template-based MFC collection classes because MFC uses a class's default constructor to create new items when functions such as InsertAt are called

  • The End
  • Registratie: Maart 2000
  • Laatst online: 21:22

The End

!Beginning

Verwijderd schreef op donderdag 02 december 2004 @ 10:37:
Jouw Groep klasse zal van CObject moeten derived moeten zijn, plus dat er een default-constructor aanwezig moet zijn.

Even een quote uit het grote MFC boek:

It's important to include default constructors in classes you use with CArray and other template-based MFC collection classes because MFC uses a class's default constructor to create new items when functions such as InsertAt are called
Als hij een CObArray gebruikt dan is het idd een goed idee om je objecten van CObject af te leiden, maar hij gebruikt nu juist de template class CArray. Daar hoeft je object geen CObject te zijn.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Dat zou betekenen dat ie ze voor Persoon wel gemaakt heeft? Dan had ie toch zeker wel zelf het verschil al op moeten merken ;)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

The End schreef op donderdag 02 december 2004 @ 10:49:
[...]


Als hij een CObArray gebruikt dan is het idd een goed idee om je objecten van CObject af te leiden, maar hij gebruikt nu juist de template class CArray. Daar hoeft je object geen CObject te zijn.
Klopt, ik had het fout.

Verwijderd

Topicstarter
Een default constructor in klasse Groep staat er...

Wanneer ik de CArray in de klasse Groep verwijder (CArray<Persoon,Persoon> persoonList;), dan lukt het me wel om de CArray van het Document (CArray<Groep,Groep> groepList;) aan de praat te krijgen op de manier uit m'n vorige post.

Het probleem zit em in het feit dat ik een CArray in een CArray wil plaatsen denk ik. :/

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 19-05 15:46

BoAC

Memento mori

Verwijderd schreef op donderdag 02 december 2004 @ 11:39:
Een default constructor in klasse Groep staat er...

Wanneer ik de CArray in de klasse Groep verwijder (CArray<Persoon,Persoon> persoonList;), dan lukt het me wel om de CArray van het Document (CArray<Groep,Groep> groepList;) aan de praat te krijgen op de manier uit m'n vorige post.

Het probleem zit em in het feit dat ik een CArray in een CArray wil plaatsen denk ik. :/
Heb je al gekeken naar die CopyElements in de msdn? Daar staat dus ook info over een copy maken van een CArray: msdn
Pagina: 1