JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Probleme beim Inkludieren von Headerdateien
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 04.05.2006, 18:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Flow
Junior JLI'ler


Alter: 42
Anmeldedatum: 13.09.2005
Beiträge: 57

Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 20:55    Titel: Antworten mit Zitat

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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 21:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
Flow
Junior JLI'ler


Alter: 42
Anmeldedatum: 13.09.2005
Beiträge: 57

Medaillen: Keine

BeitragVerfasst am: 05.05.2006, 11:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 05.05.2006, 11:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 05.05.2006, 12:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Flow
Junior JLI'ler


Alter: 42
Anmeldedatum: 13.09.2005
Beiträge: 57

Medaillen: Keine

BeitragVerfasst am: 05.05.2006, 18:05    Titel: Antworten mit Zitat

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 Smile DANKE!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
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

Impressum