Avatar billede mickni33 Nybegynder
22. november 2000 - 12:14 Der er 9 kommentarer og
1 løsning

oprette et objekt i en anden klasse

Borland Builder 4.0


///////////////////////////////////////////
String Kundedata::indtast_fornavn(String& navn){
        String fornavn=navn;
        return fornavn;
}
///////////////////////////////////////////

String Kunde::indtast(String& temp)
  { Kundedata* kundedata;
    kundedata->indtast_fornavn(temp);
    return  (temp);
    }

Der er to klasser  Kunde og Kundedata..
disse to metoder fungerer kun hvis jeg opretter kundedata objektet lokalt i metoden
hvis jeg ligger den i public eller private virker lortet ikke.......

Og for at det ikke skal være løgn så virker fornavn også kun hvis jeg erklærer i den lokale metode som String fornavn.....
altså så længe jeg erklærer dem lokalt fungerer programmet men det er ikke særligt hensigtsmæssig at man opretter et objekt i hver sin metode....eller er det???

Hvor når skal man bruge __fastcall, kan det have nogen betydning.
Programmet kan godt compilerer  men går ned når jeg indtaster navn
Avatar billede soepro Nybegynder
22. november 2000 - 13:08 #1
Du laver i alt fald een fejl her:

String Kunde::indtast(String& temp)
{ Kundedata* kundedata;
  kundedata->indtast_fornavn(temp);
  return  (temp);
}

Kundedata her er jo en pointer til et element af klassen Kundedata - men du har jo ikke fortalt den hvilket element endnu !!! Normalt skal man lave allokere et element til pointeren (hvis man ikke allerede HAR gjort det) vha. new operanden:

  Kundedata* kundedata = new Kundedata(temp);
                    -eller-
  Kundedata* kundedata = new Kundedata();
 
idet jeg antager at man kan angive navn i constructoren til Kundedata klassen. Hvis du skal gemme Kundedata i Kunde klassen, må man vel formade at klassen Kunde indeholder en Kundedata pointer allerede. I så fald skal du ændre d.o. til:

  kundedata = new Kundedata();
  kundedata->indtast_fornavn(temp);

Hvis du vil have et helt præcist svar, må vi have dine klassedefinitioner her ud på eksperten. (Se evt. også http://www.eksperten.dk/spm/33372 som også omhandler klasser.)
Avatar billede mickni33 Nybegynder
22. november 2000 - 13:33 #2
Klassen Kunde indeholder en Kundedata pointer objekt men den godtager ikke når den står i klasse def. kun hvis jeg laver den i en lokal metode. kan det passe???
Avatar billede soepro Nybegynder
22. november 2000 - 15:28 #3
Nej, det burde være muligt at referere Kundedata klassen i Kunde - men igen, det ville være nemmere hvis du lige lagde klassedefinitionerne ud.
Avatar billede tuxen Nybegynder
23. november 2000 - 16:13 #4
Hej.
du kan sagtens lægge pointeren til sdin anden klasse i både public og private, men hvis du vil bruge den til noget SKAL du initialisere den med NEW.
NEW vil kalde dens constructor og der kan du initialisere, og du vil holde et obj af typen kundedata.
New bruges fordi den dynamisk opretter obj. Det er jo ikke hesigtsmæssigt at ens klasser har obj af hinandens der måske aldrig vil blive brugt.
Som din pointer står her nede under, peger den i det blå ud i memory.

String Kunde::indtast(String& temp)
  { Kundedata* kundedata;
    kundedata->indtast_fornavn(temp);
    return  (temp);
    }

P.S det er det samme som soepro vil fortælle dig, men her sagt på en anden måde.
M.V.H Thue
Avatar billede madsjakob Nybegynder
28. november 2000 - 22:42 #5
Det kan godt lade sig gøre.
Du kan evt prøve noget lignende

// Header

class Kunde
{
  private:
      Kundedata *kundedata;
........
}

// Implementering

Kunde::Kunde()
{
  kundedata = new Kundedata;
........
}

--------
Efter at have sat pointeren til at pege på et element, skulle du gerne kunne bruge det i dine
operationer(funktioner) i kundeklassen

/MJ
Avatar billede soepro Nybegynder
29. november 2000 - 08:52 #6
mj >> præcis som jeg skrev.
Avatar billede madsjakob Nybegynder
29. november 2000 - 17:46 #7
Soepro >> Jepper!
Avatar billede mickni33 Nybegynder
02. januar 2001 - 11:27 #8
Da der har været ferie har jeg ikke været på nettet. desværre bliver der ikke givet nogle point da jeg selv har prøvet de eks. som i har givet. fandt senere ud af at det ikke var programmeringen det var galt med, og da mit projekt nu er afleveret, og det hænger mig langt ud af halsen bliver der ikke kigget mere på det.
hilsen mickni33
Avatar billede soepro Nybegynder
02. januar 2001 - 12:14 #9
Det havde været en pæn gestus at give folk f.eks. 10 point for deres ulejlighed.
Avatar billede mickni33 Nybegynder
02. januar 2001 - 12:18 #10
nååå ja det ville nok have været smart.undskyld jeg er lidt nye her på eksperten. Kan man gøre det nu? eller er det for sent.
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