Permalänk
Medlem

"include nested to deeply" c++

Jag får detta trevliga fel när jag försöker kompilera min kod.Kan man alltsån inte inkludera en klass som inkluderar den klassen som vill inkludera?Det går alltsån inte att ha dubbelt beronde eller finns det något annat som kan vara fel?.

Permalänk
Medlem

Använder du include guards?

Permalänk
Medlem

Re: "include nested to deeply" c++

Citat:

Ursprungligen inskrivet av hawy
[BDet går alltsån inte att ha dubbelt beronde eller finns det något annat som kan vara fel?. [/B]

#include är ju bara en preprocessor-operation som ersätts med det som ska inkluderas, så du kan inte ha cykler med såna nä. Kolla "Cyclic dependencies" längst ner på den här sidan för hur man kan göra.

http://www.eventhelix.com/realtimemantra/HeaderFileIncludePat...

Permalänk
Hedersmedlem

Re: "include nested to deeply" c++

Citat:

Ursprungligen inskrivet av hawy
Kan man alltsån inte inkludera en klass som inkluderar den klassen som vill inkludera?Det går alltsån inte att ha dubbelt beronde eller finns det något annat som kan vara fel?.

Nej. "#include <x>" betyder att filen x skall klistras in där include-kommandot står, så det blir problem om man har cirkulära beroenden. Ofta hjälper det att dela upp sin kod i .h-filer och .cpp-filer, där man i .h-filerna är sparsam med att inkludera andra .h-filer om det inte är helt nödvändigt. Man kan också ofta använda framåtdeklarationer istället för att inkluderingar.
http://en.wikipedia.org/wiki/Forward_declaration

Permalänk

Vill bara varna för dålig design...
Men som Elgot sa, använd framåtdeklarationer, så löser det sig nog. (Och jag antar du har slängt in #ifndef-grejen)

Visa signatur

Legalise Internet (and stimpacks)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Obbedemus
(Och jag antar du har slängt in #ifndef-grejen)

Jag frågade det eftersom jag misstänker att så inte är fallet. Jag vill minnas att felmeddelandet i rubriken kan uppkomma om man saknar include guards (och har cirkulära inkluderingar, A inkluderar B som inkluderar A => oändlig include-loop).

Permalänk

Sorry, missade det inlägget.

Visa signatur

Legalise Internet (and stimpacks)