 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 04.05.2006, 18:00 Titel: |
|
|
Könntest du eventuell doch mal die 'general.h' posten?
Vielleicht hilft es, wenn du die Funktionen in eine eigenständige Header + Source-Datei auslagerst und diese wiederum in 'general.h' einbindest, bzw. einen Prototypen besagter Funktion vor die Funktionen/Klassen/... setzt, die diese benötigen. Ich könnte mir vorstellen, dass der Compiler stresst, da die Funktion erst deklariert wird, nachdem die Klassen schon deklariert und definiert sind und diese Funktion eigentlich benötigen würden.
Wenn deine 'general.h' z.B. so aussieht:
CPP: | #ifndef _GENERAL_H_
#define _GENERAL_H_
#include "class_xyz.h"
void foobar(void);
#endif | Wenn 'xyz' nun foobar kennen muss, krachts natürlich, da die Funktion zum Zeitpunkt des Includes schlicht und einfach noch nicht bekannt ist. |
|
Nach oben |
|
 |
Flow Junior JLI'ler
Alter: 42 Anmeldedatum: 13.09.2005 Beiträge: 57
Medaillen: Keine
|
Verfasst am: 04.05.2006, 20:55 Titel: |
|
|
gelobt sei GreveN
genau da lag mein Fehler Buddy! Danke für die schnelle Antwort. Hatte bei meinem letzten Projekt schon ein ähnliches Problem, jedoch hatte ich das schon wieder vergessen. die aufteilung in funktions-header und "header"-header, die erstere als allererstes lädt werde ich mir merken. jetzt gehts weiter  |
|
Nach oben |
|
 |
proggaholic Junior JLI'ler

Alter: 36 Anmeldedatum: 07.05.2005 Beiträge: 85 Wohnort: Heap Medaillen: Keine
|
Verfasst am: 04.05.2006, 21:01 Titel: |
|
|
Jep, GreveNs Vorschlag dürfte das Problem mit ziemlicher Wahrscheinlichkeit lösen. Wenn z.B. zwei Module sehr viel miteinander zu tun haben und die Variablen/Funktionen nur in Abhängigkeit des anderen Moduls existieren/verwendet werden, könnte man sich auch überlegen, diese zusammenzupacken, was u.U. auch der logischere Aufbau sein kann. Ansonsten hilft es manchmal, nacheinander die #includes durchzugehen und aufzuzeichnen, welche Klasse was benötigt, da sieht man relativ schnell, warum was in dieser speziellen Reihenfolge nicht funktioniert.
Die Sache mit der general.h ist zwar eine feine Sache, aber die einzelnen Module sollten wirklich nur das includen, was von ihnen benötigt wird, unbenutzte Teile haben hier normalerweise nichts verloren (d.h. vielleicht alle Module in general.h, aber keine general.h in den Modulen, sondern nur die Module, die auch gebraucht werden).
Wenn der Bezeichner "ED_FloatRandom" nicht gefunden wird, ist wahrscheinlich der Prototyp (-> Deklaration) vor dem ersten Aufruf noch unbekannt. Erneute Definition weisst darauf hin, dass anscheinend der include-guard nicht richtig arbeitet (vorsicht, Schreibfehler bei #define!) oder dass versehentlich dort was doppelt eingetragen wurde (z.B. doppelter Prototyp, zwei Definitionen).
Also am besten versuchst du, dir mal einen Überblick über den Aufbau und die Vorgänge zu verschaffen, dann lässt es sich, denke ich, nicht nur beheben, sondern auch halbwegs sauber lösen.
[edit]
sry, war wohl etwas zu langsam...
[/edit] |
|
Nach oben |
|
 |
Flow Junior JLI'ler
Alter: 42 Anmeldedatum: 13.09.2005 Beiträge: 57
Medaillen: Keine
|
Verfasst am: 05.05.2006, 11:17 Titel: |
|
|
Habe schon wieder so ein komisches Problem, wobei ich diesmal versucht habe alles richtig zu machen.
Ich habe ein klasse ED_CVector mit allem drum und dran in der datei ED_class_vector.h
Nun habe ich eine weitere Klasse ED_CMatrix in der datei ED_class_matrix.h.
Nun benötige ich in der ED_CMatrix Klasse jedoch die ED_CVector klasse. Dazu binde ich gleich als allererstes die ED_class_vector.h in der matrix-header ein. trotzdem kenn er sie nicht. schreibfehler sind auch keine vorhanden. muss ich die irgendwie explizit "bekanntmachen"?
wenn ich zum spass in der matrix datei class ED_CVector; eingebe gibt es nur noch einen Fehler, nämlich dass es keinen Konstruktor bei ED_CVector gibt. bin auch beim googeln nicht schlauer geworden. |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 05.05.2006, 11:37 Titel: |
|
|
Jau, klingt nach dem klassischen Problem, Datei A braucht Datei B und B braucht gleichzeitig A.
Geht ganz relaxed mit einer Vorwärtsdeklaration (einer Art Prototyp für Klassen/Strukturen). Also wenn eine von beiden Klassen die andere nur 'namentlich' braucht, also nichts über den konkreteren Aufbau, wie z.B. Methoden etc. wissen muss, einfach vor die Deklaration 'class Name_der_anderen_Klasse;' setzen, dadurch machst du diese explizit bekannt und brauchst sie erst später definieren, ähnlich wie bei den Prototypen von Funktionen.
Zuletzt bearbeitet von GreveN am 06.05.2006, 08:28, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.05.2006, 12:01 Titel: |
|
|
ja, möchte man einen Zeiger auf ein Element speichern benötigt man nur die Vorwärtsdeklaration. Möchte man allerdings über den Zeiger eine Methode des Objektes aufrufen, muss man die Headerdatei includieren. Das muss man aber nicht in der .h machen, sondern kann es auch in der .cpp machen. Das ist ganz nützlcih wenn sich 2 Headerdateien eigentilch gegenseitig einbinden müssten. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Flow Junior JLI'ler
Alter: 42 Anmeldedatum: 13.09.2005 Beiträge: 57
Medaillen: Keine
|
Verfasst am: 05.05.2006, 18:05 Titel: |
|
|
wieder mal vielen dank jungs.
ich merke langsam dass das echt eine sache der erfahrung ist. ich werde es jetzt doch nur noch so machen, die headers die benötigt werden, einzubinden.
nutze eine "sammel-header" nur noch für die standardheaders wie windows.h, math.h usw. wo ich weiss dass sie nicht voneinander abhängig sind. und schon wieder eine grosse lektion gelernt DANKE! |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|