JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=0d37788f5865eb76e7d12d2f8272fa1fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Modulaufteilung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 25.05.2004, 19:59    Titel: Modulaufteilung Antworten mit Zitat

Argh, ich kriegs schon wieder nicht hin! Also im prinzip ist da die Editorklasse, die unter anderem ne Inputklasse hat. Diese Inputklasse soll auf die methoden der Editorklasse zugreifen, also übergeb ich einen Zeiger an sie:
Code:

void CEditor::Init(CDirect3D* pDirect3D, CDirectInput* pDirectInput)
{
   m_pDirect3D=pDirect3D;
   m_pDirectInput=pDirectInput;

   m_Modell.Init(m_pDirect3D);
   m_Inputmanager.Init(m_pDirectInput, &m_Modell, this);
}

Das Problem ist nun das inkludieren der Header:
Da sich Input.h und Editor.h gegenseitig einbinden, funzt das irgendwie nicht. Und wenn ich einfach die Vorwärtsdeklaration nehme:
Code:

//Input.h

//Verwaltet mithilfe der DIKlasse die eingaben des Users

#pragma once
#include "Global.h"
#include "CDirectInput.h"
#include "Partlist.h"
//#include "Editor.h"
class CEditor;


class CInput
{
public:
   CInput();
   ~CInput();
   void Init(CDirectInput* pDirectInput, CPartlist* pPartlist, CEditor* pEditor);//Zeiger auf die Objekte speichern
   void GetInput();//Die eingaben verarbeiten, jede Frame aufrufen
protected:
   CDirectInput* m_pDirectInput;
   CPartlist* m_pPartlist;
   CEditor* m_pEditor;
};


Kommt dieser nette Fehler:
D:\C++\Modelleditor\Input.cpp(3Cool : error C2027: Verwendung des undefinierten Typs "CEditor"
d:\c++\modelleditor\input.h(10) : Siehe Deklaration von 'CEditor'
(und noch ein paar mehr)

Gibt es da ne Lösung, oder muss ich das ganze irgendwie anders aufbauen? Falls es nicht reicht kann ich auch mal die komplette Headerdatein posten, aber ich wollts nicht so lang machen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 25.05.2004, 20:19    Titel: Antworten mit Zitat

wieso geht das denn net?
wenn du mit #include "Editor.h" deinem File die Deklaration von CEditor bekanntmachst, dann sollte das doch kein problem sein...

dazu brauchst du auch net die zeile class CEditor.
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 26.05.2004, 12:06    Titel: Antworten mit Zitat

Doch, denn wenn ich das mache, bindet Input.h Editor.h ein und Editor.h bindet Input.h ein.
Code:

//Editor.h

#pragma once

#include "Global.h"
#include "CDirect3D.h"
#include "CDirectInput.h"
#include "Partlist.h"
#include "Input.h"

class CEditor
{
public:
   CEditor();
   ~CEditor();
   void Init(CDirect3D* pDirect3D, CDirectInput* pDirectInput);
   void Render();
   void Move();

   //Zugriffsmethoden auf Elemente
   void Zoom(float fVar);
   void Raster(float fVar);
protected:
   CDirect3D* m_pDirect3D;
   CDirectInput* m_pDirectInput;

   CPartlist m_Modell;
   CInput m_Inputmanager;

   Vector2 m_KameraPos;
   eAchsen m_Achsen;
   Vector3 m_CursorPos;//Position des Cursors im 3dimensinalen Raum
   void UpdateCursorPos();//Berechne die Position des Cursors in der 3DWelt

   void DrawRaster(HDC hDC);

   float m_Raster;//Gibt an, wie fein man zeichenn kann. In absoluten werten (1.0f bedeute man kann nur 2.0f, 3.0f 4.0f usw. machen)
   float m_Zoom;//Gibt an wie groß eine Einheit in ixel ist(10.0f bedeute das jede Einheit 10 Pixel von der nächsten entfernt liegt
};

So wies da oben steht, müsste es ja gehen, aber es kommt der Fehler:

:\c++\modelleditor\editor.h(2Cool : error C2079: 'm_Inputmanager' verwendet undefiniertes class 'CInput'

Und soweit gehts nur weil ich in der Global.h eine Vorwärtsdeklaration von CInput hab. Wenn ich die weglasse, kommt der Fehler: Fehlende Speicherklasse oder Typenbezeichner.

Das ist eben das komische, weil die Input.h doch eingebunden wird. Aber weil diese wiederum erstmal Editor.h einbindet, bevor die Klasse deklariert wird, gehts wohl nicht.

Und wenn ich halt nur die Vorwärtsdeklaration nehme, kommt ein Fehler wenn ich eine Methode des zeigers aufrufen will, wie ich oben schon geschrieben hab.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 26.05.2004, 13:45    Titel: Antworten mit Zitat

Ich weiß net sicher, obs funzt, aber versuche es doch mal damit:
Code:
#ifndef _HEADERNAME_
#define _HEADERNAME_

//CODE

#endif

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 26.05.2004, 14:09    Titel: Antworten mit Zitat

Naja, ich habs jetzt anders gemacht, nämlich einfach Zeiger auf die Elemente von CEditor übergbene, um sie zu bearbeiten, statt die Methoden von CEditro zu bentuzen. Jetzt gehts, es ist aber natürlich nicht so schön. Vieleciht probierich das mit dem ifdefine statt pragma once auch noch aus.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 13.06.2004, 15:42    Titel: Antworten mit Zitat

Ich hab leider schon wieder ein solches Problem und wollt nicht extra ein neuen Thread aufmacheN.
Ich versuche gerade die im Buch mit
#define SCR_WIDTH 1024
#define SCR_HEIGHT 768
fest definierte Bildschirmgröße variabel zu machen. Da ja eine Funktionen diese Größe wissen müssen um z. B. einen Text zu zentreiren, hab ich einfach Globale int-Variablen draus gemacht.
Allerdigns bekomme ich jetzt in jeder Datei, in die ich die Global.h einbinde den Fehler:

main.obj : error LNK2005: "int SCR_HEIGHT" (?SCR_HEIGHT@@3HA) bereits in Ball.obj definiert
main.obj : error LNK2005: "int SCR_WIDTH" (?SCR_WIDTH@@3HA) bereits in Ball.obj definiert

Und wenn ich die Deklarationen nicht in die Global.h schreib sonder z. B. in die Datei wo auch die WinMainfunktion ist, gibts Compielrfehler, das er die nicht kennt.

am Anfang der Global.h steht schon #pragma once und ich hab auch schon

Code:

#ifndef SCR
#define SCR
int SCR_WIDTH;
int SCR_HEIGHT;
#endif


ausprobiert, ohne erfolg.
Bei globalen FUnktionen musste ich auch die eigentliche Funktion in Global.cpp schreiben und den Prototypen in die Globalh.
wieß jemand warum das nicht funktioniet?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 17:19    Titel: Antworten mit Zitat

Zum ersten Problem:
Du musst in die Input.cpp die Editor.h inkludieren. Schließlich wird in der Input.cpp die variable vom Typ Editor verwendet. Diese hast du aber vorher nur durch class Editor bekannt gemacht.

Beim letzten Problem musst du afaik das schlüsselwort extern verwenden.
Wie man das genau verwendet weiß ich nicht mehr, benutze ich nie Razz
Du musst glaube ich in einer datei "int bla;" schreiben und in den anderen .cpp's, die diese variable verwenden "extern int bla;"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 13.06.2004, 17:36    Titel: Antworten mit Zitat

jo, danke prima, hat mir sehr geholfen. Die Lösung ist ähnlich wie bei den globalen Funktionen:

in der Global.h:
extern int SCR_WIDTH

ind der Global.cpp
int SCR WiDTH
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
andijota
Junior JLI'ler



Anmeldedatum: 07.11.2002
Beiträge: 66
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 17.06.2004, 15:24    Titel: Antworten mit Zitat

nebenbei:

extern int externe_irgendwas;

kann ich ueberall und mehrmals schreiben .

andi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.06.2004, 20:14    Titel: Antworten mit Zitat

andijota hat Folgendes geschrieben:
nebenbei:

extern int externe_irgendwas;

kann ich ueberall und mehrmals schreiben .

andi

Das ist ja der Sinn der Sache Wink
"extern" definiert, dass die Variable/Konstante/o.ä. extern verfügbar ist, aber nicht deren Wert bzw. Inhalt. Deshalb ist es auch egal, wie oft du dem Kompiler zeigen willst, dass er die Variable extern verfügbar machen soll.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
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