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
|
Verfasst am: 20.07.2003, 19:53 Titel: Klasse in Klasse einfügen |
|
|
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 |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 20.07.2003, 20:03 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.07.2003, 20:06 Titel: |
|
|
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 |
|
|
Mäscht JLI'ler
Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine
|
Verfasst am: 25.07.2003, 21:23 Titel: |
|
|
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 |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 25.07.2003, 22:06 Titel: Hmmm |
|
|
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 ) 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. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 25.07.2003, 22:15 Titel: |
|
|
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 |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 25.07.2003, 22:21 Titel: Hmmm |
|
|
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 |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.07.2003, 07:30 Titel: |
|
|
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 |
|
|
FanBoy Mini JLI'ler
Anmeldedatum: 21.07.2003 Beiträge: 33
Medaillen: Keine
|
Verfasst am: 26.07.2003, 18:36 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.07.2003, 18:47 Titel: |
|
|
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 |
|
|
FanBoy Mini JLI'ler
Anmeldedatum: 21.07.2003 Beiträge: 33
Medaillen: Keine
|
Verfasst am: 26.07.2003, 18:58 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
Mäscht JLI'ler
Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine
|
Verfasst am: 19.08.2003, 12:38 Titel: |
|
|
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 |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 19.08.2003, 13:15 Titel: |
|
|
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 |
|
|
|