Gå til innhold

[LØST]ERROR i kode, muligens noe tull i "include greine? Cyclic dependencies


Anbefalte innlegg

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 av Lord-KGA
Lenke til kommentar
Videoannonse
Annonse

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
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...