Avatar billede hurra Novice
18. august 2005 - 10:44 Der er 7 kommentarer og
1 løsning

Hvorfor kan en constructor ikke kalde en constructor ?

Jeg har 2 næsten ens constructore til min unit, så for ikke at skrive det samme kode flere gange har jeg genbrugt, men det virker ikke:
__fastcall TCommonControls::TCommonControls(TForm *lParent, unsigned char noFixSites, bool MultiCustomer, TBSIniFile **lUserIni)
{
  UserIni = *lUserIni;
  TCommonControls(lParent, noFixSites, MultiCustomer);
}

__fastcall TCommonControls::TCommonControls(TForm *lParent, unsigned char noFixSites, bool MultiCustomer)
{
........

De ovjector der bliver oprettet i nummer 2 constructor (den med 3 inputs), bliver i virkligheden ikke oprettet. Istedet for har jeg gjort sådan her:
__fastcall TCommonControls::TCommonControls(TForm *lParent, unsigned char noFixSites, bool MultiCustomer, TBSIniFile **lUserIni)
{
  UserIni = *lUserIni;
  Parent = lParent;
  CreateCommonControls(noFixSites, MultiCustomer);
}

__fastcall TCommonControls::TCommonControls(TForm *lParent, unsigned char noFixSites, bool MultiCustomer)
{
  Parent = lParent;
  CreateCommonControls(noFixSites, MultiCustomer);
}

void TCommonControls::CreateCommonControls(unsigned char noFixSites, bool MultiCustomer)
{
.....
og det virker. Hvorfor det ? Hvad sker der når en construstor kalder en anden constructor ?
Avatar billede jpk Nybegynder
18. august 2005 - 12:05 #1
Du skal kalde den i initializer statement:

MyConstructor(int a, int b)
: MyConstructor(a)
{
}
Avatar billede hurra Novice
18. august 2005 - 12:33 #2
Det giver mening det du siger der, men jeg kan ikke få det til at virke. Er det ikke sådan her du mener ?

__fastcall TCommonControls::TCommonControls(TForm *lParent, unsigned char noFixSites, bool MultiCustomer, TBSIniFile **lUserIni) : TCommonControls(lParent, noFixSites, MultiCustomer)

Jeg får en fejl:
[C++ Error] CommonControlsUnit.cpp(11): E2312 'TCommonControls' is not an unambiguous base class of 'TCommonControls'
Avatar billede jpk Nybegynder
18. august 2005 - 16:07 #3
Jeg var vist lidt for hurtig, det kan vist kun lade sig gøre hvis du skal kalde en baseklasses constructor...
Avatar billede hurra Novice
18. august 2005 - 18:04 #4
Ok, det er rigeligt svar, jeg var bare nysgerig. Send et svar, så får du lidt point.
Avatar billede jpk Nybegynder
18. august 2005 - 18:11 #5
Okay, held og lykke med det!
Avatar billede arne_v Ekspert
18. august 2005 - 18:35 #6
så vidt jeg husker er det kun Jav aog C# som kan lave det nummer at kalde
fra en constructor til en anden

i C++ løser man ofte problem stillingen med at have default værdier for
argumenter til constructoren
Avatar billede segmose Nybegynder
29. august 2005 - 13:48 #7
My::My() { // constructor A
  Setup(noget, andet);
}

My::My(int A) { // constructor B
  SetUp(A, antet);
}

osv.
Avatar billede hurra Novice
29. august 2005 - 14:23 #8
segmose: det er jo egentligt også det jeg har nu, og har sendt i spørgsmålet.
Men tak til jeg alle for svarene. jpk du skal ha pointene for at være først med et rigtigt svar (og også et forkert svar for den sags skyld :).

Over and out...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester