C4182 und C1076
-
Hallo!
Ich habe ein Projekt dass jetzt schon etwas umfangreicher ist und ploetzlich, nachdem ich eine weitere .h und .cpp fuer eine neue Klasse hinzugefuegt habe, taucht dieser Fehler auf
:
c:\...\global.h(1) : warning C4182: #include nesting level is 359 deep; possible infinite recursion c:\...\global.h(1) : fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
Dieselbe Fehlermeldung erscheint fuer alle Headerfiles.
Was mache ich falsch?Danke fuer eure Hilfe im voraus.
-
Verwendest Du auch brav Include Guards?
#ifndef MYHEADER_H #define MYHEADER_H /* Dein Code */ #endif
-
Nein daran liegts leider nicht.
Dann waere eine Mehrfachdefinition die Fehlermeldung ...
-
Ersetze include-Direktiven in Headerdateien (wo es möglich ist) durch Forward-Deklarationen, und setz die include-Direktiven in die cpp-Dateien.
Ansonsten kannst du auch (wie der Compiler es ja selbst vorschlägt) mit dem Schalter /Zm die Heapgröße erhöhen.
-
Ich verstehe zwar nicht ganz was du meinst, aber ist das derzeitig eingestellte Heaplimit ueberschritten, weil ich in den Headerfiles zu viele andere Headerfiles eingebunden habe?
Wie kann ich das Heaplimit veraendern? (Ich verwende MS VC++ 6.0) In den Projekteinstellungen?
-
Du solltest das Limit nicht erhöhen. Bei 359 Inkludierungen hat der Compiler höchstwahrscheinlich recht mit seiner Vermutung der endlos-Rekursion.
Das heißt, dass ein Header sich (möglicherweise über Umwege) selbst einbindet.Du bindest wahrscheinlich in einem Header A einen Header B ein, der wieder Header A einbindet, usw.
Andere Möglichkeit, die weniger auffällt: Header A bindet Header B ein, dieser wiederum Header C, der Header A einbindet.Geh nochmal deine #include-Logik durch, irgendwo hast du eine Rekursion.
-
Ja ich habs gefunden :). Es war eine Rekursion ... Danke an alle fuer eure Hilfe!