ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
719
719
EMPFEHLEN
-
Tag,
ich kann mich irgendwie kein Stück mit Kreuz-Includes anfreunden, aber ab ner bestimmten Menge Quellcode wirds einfach irgendwann nötig.
Ich hab aber das Prob, dass der Linker mich dauernd wegen mehrfach erzeugter Symbole anmeckert, obwohl ich #pragma once benutze (was das ja meines Wissens nach eg verhindern soll, genauso wie #ifndef...#define).
Auszüg ausm Src wär sowas:
ThreadHandler.h
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#pragma once #include "MainHandler.h" class cMainHandler; class cThreadHandler { public: struct strThreadData { cMainHandler * pMainHandler; }; . . .
MainHandler.h
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
#pragma once #include "ThreadHandler.h" class cThreadHandler; class cMainHandler { private: cThreadHandler * pThreadHandler; . . .
Danke schomma für jeden kleinen Hinweis, weil das nervt mich schon lange und deswegen muss man immer seinen schön strukturierten Code wieder verwurschteln
-
Hallo,
Include Guards (egal ob in der Form #ifndef ... #define oder mit #pragma once) verhindern nur, dass eine Datei mehrfach eingebunden wird. Was du hier machst, ist was anderes: du bindest eine Datei ein, in der eine Klasse deklariert wird und versuchst im Anschluss, die Klasse gleich nochmal zu deklarieren. Wozu brauchst du die #include hier überhaupt? Wenn du sie weglässt, sollte dein Problem gelöst sein.
Grüße, Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Das "class cMainHandler;" und das andere sind nur Platzhalter. In denen wird die Klasse ja nicht wirklich definiert (so wie ich das mitbekommen hab).
Aber damit wird das Programm wenigstens schomma compiled, wnn ich die auskommentier kommt sowas schönes
Code :1 2 3
threadhandler.h(13) : error C2143: Syntaxfehler: Es fehlt ';' vor '*' threadhandler.h(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. threadhandler.h(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
Und das Problem ist meiner Meinung nach doch eine Mehrfacheinbindung, weil ich den LNK2005 so oft bekomme, wie ich die jeweilige Klasse Include und nicht nur doppelt wegen "class cMainHandler;".
Das wird schon gebraucht, ist das gleiche wie bei
Code :1 2 3
class A; class B { A* a; }; class A { B* b; };
-
Das ist eine Vorwärts-Deklaration. Nach ihr kann die vollständige Deklaration der Klasse folgen, aber nicht andersrum.
Das ist klar, da der Typ dann nicht bekannt ist. Ich habe ja auch nur gesagt, dass du die #include weglassen sollst, nicht die Vorwärts-Deklarationen.
Dieses Verhalten ist kein Indiz für Mehrfacheinbindung.
Was du machst, ist aberCode :1 2 3 4
class A; class B { A* a; }; class B; // Erneute Deklaration von B, unzulässig class A { B* b; };
Grüße, Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
k, habs hinbekomm.
Hab einfach alle deklarationen inne stdafx gepackt und included wie ich lustig war...t irgendwie
danke dir
-
21.07.09 08:07 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Dieser Code ist völlig OK. Man darf (Vorwärts-) Deklarationen sooft wiederholen wie man will (selbst nach der Definition der Klasse), vorausgesetzt sie sind völlig identisch zu den vorigen Deklarationen.
Wenn dort Linkerfehler auftreten, liegt das wahrscheinlich daran, dass statische Member, Instanzvariablen oder Funktionen in der Headerdatei definiert wurden.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
error LNK2005
Von samkirchner im Forum C/C++Antworten: 3Letzter Beitrag: 27.08.09, 11:10 -
Error LNK2005 - Mehrfachdeklaration Verständnisproblem
Von Skid im Forum C/C++Antworten: 8Letzter Beitrag: 02.03.09, 11:16 -
#pragma und #define Problem
Von GNiewerth im Forum Borland CBuilder und VCLAntworten: 0Letzter Beitrag: 06.02.08, 16:26 -
[C] VS05 Linker Error LNK2005
Von Viper2009 im Forum C/C++Antworten: 7Letzter Beitrag: 22.08.07, 14:43 -
pragma frage
Von netrobot im Forum C/C++Antworten: 3Letzter Beitrag: 11.10.04, 19:16





Zitieren

Login






