JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Klasse in Klasse einfügen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 19:53    Titel: Klasse in Klasse einfügen Antworten mit Zitat

Wie kann ich eine Klasse in eine Klasse einfügen! Normalerweiße geht das ja so: Ich binde die Header-Datei der klasse ein und definiere die Klasse (zB: Klasse Class)! Wenn ich dann aber eine Klasse in eine Klasse einbinden will, kommt eine Fehlermeldung! "Neudefinition von Klasse" Oder so ähnlich!!
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 20:03    Titel: Antworten mit Zitat

wie meinst du mit einbinden(code der header wären hilfreich...).
wenn du die andere klasse nutzen willst dann mach doch einfach:

Code:
#include "header_der_externen_klasse.h"
class klasse
{
    .........
    private:
       deine_andere_klasse * extclass; /*deine_andere_klasse  is der name der klasse*/
}


Zuletzt bearbeitet von nigs am 20.07.2003, 20:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 20:06    Titel: Antworten mit Zitat

Du meinst Instanzen einer anderen Klasse, oder?

Code:


// Forward-Deklaration
class Zwo;

class Eins
{
public:
..
private:
Zwo * m_pRef;
};



Oder meinst du so?

Code:


class Eins
{
    class Zwo
    {
        ...
    };
....
};

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 25.07.2003, 21:23    Titel: Antworten mit Zitat

Ich glaube ich habe alles zu kompliziert gefragt!
Angenommen ich möchte 2 Klassen haben! Ich erstelle verschiedene Header-Dateien(Test1.h und Test2.h) und die dazugehörigen Quellcode-Dateien(Test1.cpp und Test2.cpp)!
Jetzt möchte ich aber in Test2.cpp eine funktion aus Test1.cpp nutzen!
Wenn ich in Test2.cpp
Code:

#include <ddraw.h>
#include "Test1.h"

Test1 Test,

....


funktioniert das ganze nicht!
Ich bekomme dann immer eine Fehlermeldung("Neudefinition..blabla") oder so ähnlich!

Versteht ihr jetzt was ich meine??
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 25.07.2003, 22:06    Titel: Hmmm Antworten mit Zitat

Hallo,

genau das meinte Hazel. Du willst die Instanz einer Klasse. Also von einer andren Klasse (Test1) eine Funktion (besser Methode wenns schon um Instanzen geht Wink) in deiner meinetwegen Test2 nutzen?

Dazu musst du ja nur in der neuen Klasse ein Objekt auf deine zu nutzen wollende Klasse schreiben.
Dann kannst du in Funktionen mit "Test1.Methode()" aufrufen was du brauchst. Sehe ich das richtig?
Wenn dus aber so machst, wie du zuletzt geschrieben hast, dann definierst du fuer den Kompiler die Klasse Test auf Test1 um, was ja nicht geht. Daher Neudefinitionenfehler.

Man kompliziert. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.07.2003, 22:15    Titel: Antworten mit Zitat

Anscheinend hast du keine Include-Guards. Das sollte in keiner Include-Datei fehlen:

Code:

#ifndef DATEINAME_H
#define DATEINAME_H

blablablablabluppbla

#endif

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 25.07.2003, 22:21    Titel: Hmmm Antworten mit Zitat

Hallo,

sorry Maescht, aber ich muss eben was fuer mich fragen, wenns schon hier steht.
Sag mal Hazel. Ich hab ja nu schon einiges gesehen, aber was fuer mich ein großes Mysterium (neben dem elementaren Zerwuerfniss des Seins) ist, sind diese Include-Guards. Wozu im genauen ist denn dieses ifndef gut? Ich meine nicht in der Funktion, sondern im Nutzen? Was bringts?

Danke Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.07.2003, 07:30    Titel: Antworten mit Zitat

Das verhindert, dass eine Include Datei 2x includiert wird(was für ein bekloppter Satz). z.B.:

Code:

// Heinz.h

#include "Petra.h"


Code:

// HansDieter.h
#include "Heinz.h"
#include "Petra.h"


Bei so einer Konstellation wird es sicher zu Fehlern kommen, weil die Bezeichner in Petra zweimal definiert werden. Mit einem Include-Guard kann das verhindert werden(Wenn Petra noch nicht definiert -> Definiere Petra).
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 26.07.2003, 18:36    Titel: Antworten mit Zitat

Sorry, aber ich habs immer noch nicht verstanden =(
Ich wollte gerade wegen dem gleichen Problem ein Topic aufmachen...
Wie kann ich in der 2. Klasse denn ein Objekt der 1. Klasse erzeugen, ohne die header datei zu Includen?
Er kennt doch dann die Klasse gar njet, und wird deswegen rummeckern wenn ich
Code:

class Zwei
{
...
Eins ObjektDerAnderesKlasse;
ObjektDerAnderesKlasse.wurst();
...
};


schreibe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.07.2003, 18:47    Titel: Antworten mit Zitat

Code:

class Zwei
{
...
Eins ObjektDerAnderesKlasse;
ObjektDerAnderesKlasse.wurst();
...
};


Wie soll das denna uch gehen? Du kannst im Klassenrumpf doch keine Funktion aufrufen!

Code:

// Zwei.h

class Eins;
class Zwei
{
   Eins InstanzVonEins;
   ...
};


// Zwei.cpp
#include "Zwei.h"
#include "Eins.h"

void Zwei::MethodeVonZwei(void)
{
   InstanzVonEins.MachWasSinnvolles();
}


Ich hoffe du verstehst es sinngemäß.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 26.07.2003, 18:58    Titel: Antworten mit Zitat

wow, das war schnell =)
allerdings nicht ganz was ich wissen wollte, war aber mein Fehler, Funktion in Klassendefinition aufrufen.. tztztz, so was dummes...

Mein problem wäre auch ohne diesen Funktionsaufruf dagewesen, nämlich die oben erwähnte Neudefinition, wenn ich irgendwo anders nochmal #include eins.h geschrieben hätte.
Um da auch noch die Klasse aus eins.h zu nutzen.

allerdings habe ich jetzt verstanden was du mit dem #ifndef... Zeug gemeint hast, damit habe ich mein problem gelöst, thx daher =)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.07.2003, 19:22    Titel: Antworten mit Zitat

okay, alles palleti. :)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 12:38    Titel: Antworten mit Zitat

Ok! Das mit dem #ifndef usw. habe ich gemacht! Aber irgendwie übernimmen mir die Funktionen keine Werte! Wenn ich zB. in meine Klasse für Sprites eine funktion einer anderen Klasse aufrufe, übergibt die klasse für die Sprites der anderen Funktione der anderen Klasse keine Werte! Das habe ich auch getestet! Ich habe zuerste einen Wert in eine Funktion geschrieben und mir dann den Wert am Bildschirm ausgegeben! Der Wert war immer 0 obwohl ich zB. 100 eingegeben hatte! Warüm den des!
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 13:15    Titel: Antworten mit Zitat

Poste mal ein Beispiel.

Du machst das schon so:

test1.cpp
Code:

#include "test1.h"
void test1::print_it(int zahl)
{
cout << zahl;
}


test1.h
Code:

#ifndef test1_h
#define test1_h

#include "test1.h"
class test1
{
public:
test1();
~test1();
void print_it(int zahl);
}
#endif




test2.cpp
Code:

#include "test2.h"
test1 klasse1;

void test1::remember(int zahl)
{
own_zahl = zahl;
}
void test1::print_it(void)
{
klasse1.print_it(own_zahl);
}


test2.h
Code:

#ifndef test2_h
#define test2_h

class test1
{
public:
test1();
~test1();
void remember(int zahl);
void print_it(void)
}

#endif


noch kurze Anmerkung:
#ifndef Dateiname
falls Konstante Dateiname noch nicht definiert
#define Dateiname
definiere Konstante Dateiname

mach das....

#endif
Ende von #ifndef
_________________
The source of all power is in its destiny...
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 -> Fragen, Antworten und Kritik 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