Giddion Skrevet 5. september 2004 Del Skrevet 5. september 2004 jeg har et problem jeg skal ha 2 klasser den ene skal ha en ha en pointer til den andre. Når jeg prøver på dette får jeg problemer med dette siden når man kompilerer så "vet" jo ikke kompilatoren om den andre klassen før den har lest deklarasjonen som den da ikke kan lese uten å ha lest hele deklarasjonen først på en annen måte klasse1 en har klasse 2 som member og klasse2 har klasse1 som menber åssen gjør jeg det. PS: 1. Beklager dårlig overskrift 2. Det kan tid før jeg får svart Lenke til kommentar
eirikhm Skrevet 5. september 2004 Del Skrevet 5. september 2004 (endret) er ikke noe hokus bak dette: class A; class B{ private : A *temp; }; class A{ private: B* temp; }; Endret 5. september 2004 av eirikhm Lenke til kommentar
A_N_K Skrevet 5. september 2004 Del Skrevet 5. september 2004 Du må skille mellom deklarasjon og definisjon. Dessverre er C++ et av de språkene hvor du må deklarere før bruk. Lenke til kommentar
søppel Skrevet 5. september 2004 Del Skrevet 5. september 2004 (endret) Enkel løsning; #include <iostream> using namespace std; template<class T> class A { public: void func() { cout << b.i << endl; } // func T b; }; // A class B { public: int i; }; // B int main() { A<B> a; a.b.i = 1234; a.func(); return(0); } // main Edit: Fordi det eirikhm nevner kun fungerer i de enkleste tilfeller. :] Edit2: Irriterende at det finnes to memberfunction-operators (eller hva de kalles); operator.() og operator->() ... Endret 5. september 2004 av søppel Lenke til kommentar
JBlack Skrevet 10. september 2004 Del Skrevet 10. september 2004 (endret) Irriterende at det finnes to memberfunction-operators (eller hva de kalles); operator.() og operator->() ... Da jeg først begynte med C++ ante jeg ikke forskjellen på disse, og jeg prøvde først den ene. Dersom den ikke kompilerte, så brukte jeg den andre. Nå synes jeg det er praktisk at man kan bruke både objekter (.) og pekere (->). someclass a; someclass *b =new someclass(); a.afunction(); b->afunction(); delete b; Endret 10. september 2004 av JBlack Lenke til kommentar
A_N_K Skrevet 10. september 2004 Del Skrevet 10. september 2004 operator -> er nyttig i forbindelse med smarte pekere, vil jeg tro. Forøvrig har D kvittet seg med ->, selv om pekere er beholdt (for interfacing med C bla.). Lenke til kommentar
søppel Skrevet 10. september 2004 Del Skrevet 10. september 2004 (endret) D virker interesannt egentlig, men hvor "stabilt " er det, er det noe større prgramvare skrevet i det? Og dette med "garbage collector" har jeg ikke troen på i /alle/ tilfeller, MÅ man bruke den eller kan man eksplisitt destruere objekter? JBlack, joda - jeg er fullstendig klar over når man skal bruke de forskjellige i praksis. Det var ikke derfor jeg nevnte det jeg nevnte. :] Endret 10. september 2004 av søppel Lenke til kommentar
JBlack Skrevet 10. september 2004 Del Skrevet 10. september 2004 Ok Søppel. Men for meg var det slik at frustrasjonen forsvant når forståelsen kom. Lenke til kommentar
A_N_K Skrevet 11. september 2004 Del Skrevet 11. september 2004 D virker interesannt egentlig, men hvor "stabilt " er det, er det noe større prgramvare skrevet i det? Og dette med "garbage collector" har jeg ikke troen på i /alle/ tilfeller, MÅ man bruke den eller kan man eksplisitt destruere objekter? Ds spesifikasjon er vel ikke fullstendig klar ennå, men så vidt jeg forstår nærmer språket seg 1.0. Skal man tro folk på nyhetsgruppen genererer også kompilatoren stødig og rask kode. Har ikke funnet noe informasjon om det, men tviler på at folk har skrevet større programmer i D, med tanke på at det er under utvikling ennå. Men for mine private formål nøler jeg ikke med å ta i bruk noe som forhåpentligvis skjærer ned tiden brukt på å skrive kode (er ikke kjent med alle detaljene ennå, men det meste sitter) :_) Du har muligheten til å konstruere/destruere selv, du kan til og med kalle free/malloc for interfacing med C-API'er. Så vidt jeg forsto skal det være mulig skru av GC, men det var en bug som gjorde at GC overså forespørselen (kanskje fikset nå). D støtter også RAII ved at objekter kan deklareres som "auto", og destrueres straks de går ut av skop (likegyldig om de er på stack eller heap). En strek i regningen er at jeg ikke får til å debugge programmene vha. gdb, dmd skal generere gdb-kompatibel informasjon, men det ser ikke ut til å fungere. Jeg vil i alle fall foreslå at du tar en kikk på Ds hjemmeside, og gjør deg opp en mening ved hjelp av språkbeskrivelsen der. Lenke til kommentar
søppel Skrevet 19. september 2004 Del Skrevet 19. september 2004 JBlack: #include <iostream> using namespace std; template<class T> class A { public: void func() { cout << b.i << endl; } // func T b; }; // A class B { public: int i; }; // B int main() { A<B> a1; a1.b.i = 1234; a1.func(); A<B*> a2; a2.b = new B; a2.b->i = 4321; a2.func(); delete(a2.b); return(0); } // main Lenke til kommentar
saboi Skrevet 19. september 2004 Del Skrevet 19. september 2004 (endret) en template løsning på det problemet syns jeg er utrolig stygt. For det første må du skrive A<b> bah; hver gang du lager et objekt når du egentlig bare skal skrive A bah; templates er til for å generalisere klasser, i hvertfall i denne konteksten, men denne klassen skal ikke være generalisert. derfor syns jeg det er bedre å bruke en forward declaration Endret 19. september 2004 av saboi Lenke til kommentar
søppel Skrevet 19. september 2004 Del Skrevet 19. september 2004 (endret) Klart, men det er ikke altid det er mulig. Edit: ... typedef A<B> A; A bah; ... Endret 19. september 2004 av søppel Lenke til kommentar
GeirGrusom Skrevet 20. september 2004 Del Skrevet 20. september 2004 en template løsning på det problemet syns jeg er utrolig stygt. Nå er template i utgangspunktet styggt... I frykt for å virke dum, hva er template egentlig? jeg er mer en C med klassestøtte en C++ kar. What? D? B er jo fra 1969, C er fra 1972... og D er fra 2005? det er jo en latterlig utvikling... Lenke til kommentar
søppel Skrevet 20. september 2004 Del Skrevet 20. september 2004 (endret) GeirGrusom: Ta en titt på http://www.cpp.no/faq/ (på bunnen der) for å se /noe/ av det som er mulig å gjøre v.h.a. templates. Endret 20. september 2004 av søppel Lenke til kommentar
Klette Skrevet 20. september 2004 Del Skrevet 20. september 2004 Supert! Lurte på dette selv =) Lenke til kommentar
A_N_K Skrevet 21. september 2004 Del Skrevet 21. september 2004 D er knapt noen offisiell "arvtager" til C, noen hevder også at neste generasjon i familien burde hett "P" (som i BCPL). Lenke til kommentar
GeirGrusom Skrevet 21. september 2004 Del Skrevet 21. september 2004 Glimrende! takker søppel! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå