Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// main.cpp #include "header1.h" #include "header2.h" void main(void) { }; // header1.h #pragma once #include "header2.h" //include von header2, da ein pointer davon gebraucht wird class H1 { H2 *TestHeader2; //speicherplatz für einen H2 pointer anlegen }; // header2.h #pragma once #include "header1.h" //include von header1, da ein pointer davon gebraucht wird class H2 { H1 *TestHeader1; //speicherplatz für einen H1 pointer anlegen }; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
1>main.cpp ..\header2.h(7) : error C2143: syntax error : missing ';' before '*' ..\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ..\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>header1.cpp ..\header2.h(7) : error C2143: syntax error : missing ';' before '*' ..\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ..\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>header2.cpp ..\header2.h(7) : error C2143: syntax error : missing ';' before '*' ..\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ..st\header2.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
// header1.h #pragma once class H1 { #include "header2.h" //include von header2, da ein pointer davon gebraucht wird H2 *TestHeader2; //speicherplatz für einen H2 pointer anlegen }; |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
// ############################################################################# // A.hpp class B; // << Forward-Declaration class A { public: B* b; void do_something_with_b (void); void foobar (void); }; // ############################################################################# // A.cpp #include "a.hpp" #include "b.hpp" // << Real-Declaration void A::do_something_with_b (void) { b->foobar (); } void A::foobar (void) { std::cout << __FUNCTION__ << endl; } // ############################################################################# // B.hpp class A; // << Forward-Declaration class B { public: A* a; void do_something_with_a (void); void foobar (void); }; // ############################################################################# // B.cpp #include "b.hpp" #include "a.hpp" // << Real-Declaration void B::do_something_with_a (void) { a->foobar (); } void B::foobar (void) { std::cout << __FUNCTION__ << endl; } // ############################################################################# // main.cpp #include "a.hpp" #include "b.hpp" int main (void) { // instanziieren A a; B b; // verlinken a.b = &a; b.a = &b; // do something with a/b a.do_something_with_b (); b.do_something_with_a (); } |
Anonymous
unregistriert
Anonymous
unregistriert
Administrator
Zitat von »"unsigned long"«
Irgendwie muss der PräProzessor ja eine Baum-Struktur herleiten können aus dem ganzen Inkludierungsgewusel und das was ich da gepostet habe ist eine der gängigsten und "fehlerfreiesten" Methoden.
Anonymous
unregistriert
Administrator
Zitat von »"unsigned long"«
Das ist nicht neu, das ist noch aus den uralten C-Zeiten, da der PräProzessor von C++ (leider) der selbe ist wie in C. Er muss einen kompletten "Includierungsbaum" herleiten um den Inhalt zusammenzufarmen und zu verbinden.
Zitat von »"http://www.open-std.org/jtc1/sc22/open/n2356/"«
2 A preprocessing directive of the form
# include <h-char-sequence> new-line
searches a sequence of implementation-defined places for a header
identified uniquely by the specified sequence between the < and >
delimiters, and causes the replacement of that directive by the entire
contents of the header. How the places are specified or the header
identified is implementation-defined.
Zitat von »"unsigned long"«
Aus diesem Grund ist es nicht möglich kreisartige oder netzartige Inkludierungsreihenfolgen mit dem PräProzessor herzuleiten, sondern nur hierarische bzw. polyhierarische Verbindungen.
Zitat von »"unsigned long"«
warum schlägt er bei Mehrfachinkludierungen ohne Include Guards nur in einer gewissen Reihenfolge fehl?
Werbeanzeige