Øj... Det var dog en hidsig sag du har der :) Og det skulle da undre mig om det ikke er en meget søgt situation du har skabt ;) hehe
Først opdagede jeg det at du i C_2 har en pointer af typen C_1, og at du i C_1 har en pointer af typen C_2. Det kunne da nemt klares ved at sikre at enhver klasse er deklareret før den bruges:
//Class declaration class C_1;
//Class definition class C_2{ public: C_1 *pc_1; //En masse andet };
//Class definition class C_1{ public: C_2 *pc2; //En masse andet };
På den måde er kompileren klar over, når den når linjen med: C_1 *pc_1; at der eksisterer en klasse med navnet C_1, men at den først bliver defineret senere :)
Så var det jeg opdagede de to linjer her: pc_1 = new C_1(this); og pc2->i = 2;
Så er pludselig ikke længere nok at klasserne er deklareret før de bliver brugt... Nu skal de <censur> også være defineret først, og det jo noget helt andet.
For at løse det bliver du nødt til at oprette hver klasse i sit eget fil-sæt (.h og .cpp):
Ganske godt spørgsmål, men jeg har desværre ikke noget særligt godt svar, for jeg har aldrig brugt "#pragma once" versionen.
Men jaja... Jeg blev selv lidt nysgerrig, så jeg gik igang med en hurtig søgning på groups.google.com
Efter hvad jeg har forstået gør #pragme once, det at den fortæller kompileren at den kun på inkludere filen én gang.
Med #ifndef versionen bliver filerne inkluderet hver gang, men den del der står mellen #ifndef og #endif bliver kun effektivt inkluderet én gang.
Der har #ifndef måske en lille fordel, idet man kan skrive noget i en header-fil, uden for #ifndef, #endif blokken, som bliver inkluderet hver gang. Ikke at jeg sådan lige her og nu kan se fordelen ved det, men nogen kan sikkert udnytte det :)
Og så var der lige en der skrev noget om at #pragma once, vist ikke er lige så understøttet af kompilerne som #ifndef-versionen, men det ved jeg nu ikke hvor meget hold der er i
Tjaa... Jeg holder mig nu bare til #ifndef-versionen, indtil jeg finder ud af at der er et problem med det... :)
Synes godt om
Ny brugerNybegynder
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.