-kga- Skrevet 15. april 2009 Del Skrevet 15. april 2009 (endret) Jeg har noe feil i to store klasser så jeg skal forkorte det i et eksampel. Håper jeg tippa riktig, ellers vil muligens eksempelet ikke være så godt. Først har jeg to klasser: ... #include "Link.h" ... class Layer { protected: Link* linkInn; ... public: ... }; ... #include "Layer.h" ... class Link { protected: Layer* layerkInn; ... public: ... }; Og en klasse over der igjen som bruker de to. Meninga er att Link skal linke mellom to Layers, så Link må peker til de to Layers. Og layers kan ha flere Link til og fra seg, og den må også holde en peker til disse Link. Problemet er att jeg får masser av feil. Så å si allt som har med layer klassen å gjøre blir feil. Om jeg fjerner #include "Link.h" og Link* linkInn i Layer klassen så forsvinner så å si alle feilenne. Jeg antar det muligens er noe tull med #include i de to klassenne. At de går i ring og includer verdander??? Eller ikke?? Mener å huske vagt at jeg hadde et lignende problem før, men husker ikke hvordan jeg løste det. Og når er jeg trøtt og lei og kommer ingen vei, så lit hjelp hadde vært greit. Er det noen som forstår hva det muligens kan være ut fra det lille jeg har skrevet her???? Eller ble det for lite? Endret 16. april 2009 av Lord-KGA Lenke til kommentar
GeirGrusom Skrevet 15. april 2009 Del Skrevet 15. april 2009 Det en ofte gjør, er å lage en foreward declaration. Velg en av filene, for eksempel Layer.h og legg til noe slikt: typedef class Link; Lenke til kommentar
-kga- Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Det hjalp en del, takker, men det er fortsatt noe feil. Hvet sånn halveis hva det er utfra hva jeg har lest om det du sa. ... //#include "Link.h" class Link; ... class Layer { protected: Link* linkInn; ... public: void a() { linkInn->b(); } void s(); ... }; ... #include "Layer.h" ... class Link { protected: Layer* layerkInn; ... public: void n() { linkInn->s(); } void b(); ... }; Jeg trur resten av problemet mitt ligger i att begge klassene bruker inne i sine funksjoner funksjoner fra den andre klassen. Og etter som jeg har forstått så kan man ikke det når man forward declarer klassen siden compileren ikke hvet noe om innholde i klassen. Viser bare feil på den ene klassen... Layer fortsatt. Hvis det er det som er feilen, det at begge klassene bruker funksjoner til den andre inne i sine egene funksjoner. Er det en måte og fikse det på? Det hjalp en del, takker, men det er fortsatt noe feil. Hvet sånn halveis hva det er utfra hva jeg har lest om det du sa. ... //#include "Link.h" class Link; ... class Layer { protected: Link* linkInn; ... public: void a() { linkInn->b(); } void s(); ... }; ... #include "Layer.h" ... class Link { protected: Layer* layerkInn; ... public: void n() { linkInn->s(); } void b(); ... }; Jeg trur resten av problemet mitt ligger i att begge klassene bruker inne i sine funksjoner funksjoner fra den andre klassen. Og etter som jeg har forstått så kan man ikke det når man forward declarer klassen siden compileren ikke hvet noe om innholde i klassen. Viser bare feil på den ene klassen... Layer fortsatt. Hvis det er det som er feilen, det at begge klassene bruker funksjoner til den andre inne i sine egene funksjoner. Er det en måte og fikse det på? Lenke til kommentar
alfred97 Skrevet 16. april 2009 Del Skrevet 16. april 2009 Hvis det er det som er feilen, det at begge klassene bruker funksjoner til den andre inne i sine egene funksjoner. Er det en måte og fikse det på? Prøv å splitte klassene dine i header- og kodefiler, noe sånt som dette: Layer.h: class Link; class Layer { protected: Link *linkInn; // ... public: void a (); void s (); // ... }; Layer.cpp: #include "Layer.h" void Layer::a () { linkInn->b(); } void Layer::s () { // whatever } Link.h: class Layer; class Link { protected: Layer *layerkInn: // ... public: void n(); void b(); // ... }; Link.cpp: #include "Link.h" void Link::n () { layerkInn->s (); } void Link::b () { // whatever } Lenke til kommentar
-kga- Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Det er fortsatt feil, men bare 2 stykk, noe som er mye mindre en de flere hundre som var tidligere. Koden, litt mer direkte hva jeg har skrevet. Layer.h class Link; class Layer { protected: vector<Link* > linksInn; public: void integration(); }; Layer.cpp #include "Layer.h" void Layer::integration() { for (int i = 0; i < linksInn.size(); i++) { linksInn.at(i)->integration(); // HER ER FEILEN!!!! } } Feilmeldingen: 1>i:\c++\work\genericann\genericann\layer.cpp(27) : error C2027: use of undefined type 'Link'1> i:\c++\work\genericann\genericann\layer.h(17) : see declaration of 'Link' 1>i:\c++\work\genericann\genericann\layer.cpp(27) : error C2227: left of '->integration' must point to class/struct/union/generic type Link klassen er som tidligere. I Link så er Layer inkludert slik: #include "Layer.h" om jeg gjør slik: class Layer så blir det mange fler feil meldinger siden Link bruker flere av funksonenne til Layer. Når jeg bruker forward delcklarasion som jeg har gjort så kan eg ikke bruke funksjonenne i klassen ser det ut til, og det hjalp ikke og splitte det over i cpp fila heller. Irriterende. Syntes noen smarte folk kunne fiksa på kopilatoren slik att det ikke blei noe problemer med så cycklic dependencies. Lenke til kommentar
alfred97 Skrevet 16. april 2009 Del Skrevet 16. april 2009 Prøv å inkludere Link.h i Layer.cpp, og omvendt. Lenke til kommentar
-kga- Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Prøv å inkludere Link.h i Layer.cpp, og omvendt. Ha, det var ikke værre nei. Det var jo så simpelt og forsåvidt rimelig logisk at det er tragisk at jeg ikke prøvde det tidligere. Takker og bukker. 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å