Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 10.08.2002, 10:05 Titel: Templates oder Basisklassen-Zeiger??? |
|
|
Also,
Ich will eine Funktion schreiben, die auf die Basisklassenwerte Zugreifen kann. Ich will der Funktion einen Zeiger auf die Klasse, von der die Werte geändert werden sollen, übergeben.
Code: |
void Zugriff(Basisklasse* Zeiger)
AbgeleiteteKlasse* pZeiger;
Zugriff(pZeiger);
|
geht das so?
Oder muss ich dazu Templates nehmen? |
|
Nach oben |
|
|
Christian_Rousselle Gast
|
Verfasst am: 10.08.2002, 12:29 Titel: |
|
|
Das sollte so gehen. |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 10.08.2002, 13:06 Titel: |
|
|
Ich hab es jetzt so versucht und hat nicht geklappt. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 10.08.2002, 18:49 Titel: |
|
|
poste noch mal deinen Code ausschnitt ganz genau! |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 10.08.2002, 19:08 Titel: KANNS NICHT POSTEN!!! |
|
|
Irgendwie kann ich das ganze Zeug nich posten, gibts ne maximale Buchstabenbegrenzung??? Trotzdem wenn´s jemand haben will soll er mir ne Mail schicken, dann bekommt derjenige den Quellcode per "Post".
mailto: VeruektesHuhn@gmx.de |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 11.08.2002, 09:46 Titel: |
|
|
Bekommst du da einen Compilerfehler oder kann er nur die Werte nicht verändern? Vielleicht greifst du direkt auf private Variablen der Klasse zu, was ja nicht geht? _________________ Es geht auch ohne |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 11.08.2002, 16:31 Titel: |
|
|
Ich probiers mal mit mehreren posts.
Das Programm besteht aus:
-Haupt.cpp
Code: |
#include <iostream.h>
#include "Basisklasse.h"
#include "AbgeleiteteKlasse.h"
AbgeleiteteKlasse AbKlasse;
AbgeleiteteKlasse* pZeiger = &AbKlasse;
void Zugriff(BasisKlasse* Zeiger)
{
Zeiger->i=40
}
void main(void)
{
Zugriff(pZeiger);
if(AbKlasse::i == 40)
{
cout<<"Klapt!"<<endl;
}
}
|
|
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 11.08.2002, 16:32 Titel: |
|
|
Dann noch
AbgeleiteteKlasse.h
Code: |
#ifndef _ABGELEITETEKLASSE_H
#define _ABGELEITETEKLASSE_H
#include "Basisklasse.h"
class AbgeleiteteKlasse : BasisKlasse
{
public:
int b;
AbgeleiteteKlasse();
~AbgeleiteteKlasse();
};
#endif
|
-AbgeleiteteKlasse.cpp
Code: |
#include "AbgeleiteteKlasse.h"
AbgeleiteteKlasse::AbgeleiteteKlasse()
{
i = 20;
b = 30;
}
|
|
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 11.08.2002, 16:35 Titel: |
|
|
-Basisklasse.h
Code: |
#ifndef _BASISKLASSE_H
#define _BASISKLASSE_H
class BasisKlasse
{
public:
int i;
BasisKlasse();
~BasisKlasse();
};
#endif
|
-Basisklasse.cpp
Code: |
#include "Basisklasse.h"
BasisKlasse::BasisKlasse()
{
this->i=10;
}
|
PS:
Ich hoffe Christian ist mir nicht böse das ich es mit mehreren posts gemacht hab, aber ich habs in einen nich reingekriegt. |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 12.08.2002, 08:42 Titel: |
|
|
Ich habs jetzt noch nicht ausprobiert aber kann es sein, dass der Fehler kommt, wenn du schreibst AbgeleiteteKlasse::i ?
Wenn er bei der Funktion Zugriff auftritt - das würde ich ohnehin machen - solltest du bei der Ableitung ein public vor BasisKlasse schreiben. (Obs was bringt weiß ich nicht, fiel mir nur auf) _________________ Es geht auch ohne |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 12.08.2002, 11:26 Titel: |
|
|
Also, wenn ich das alles Kompiliere meldet der Kompiler:
Code: |
--------------------Konfiguration: BasisklassenZeiger - Win32 Debug--------------------
Kompilierung läuft...
Haupt.cpp
C:\C++\TESTPROJEKTE\BasisklassenZeiger\Haupt.cpp(16) : error C2243: 'type cast' : Konvertierung von 'class AbgeleiteteKlasse *' zu 'class BasisKlasse *' existiert bereits, aber es ist kein Zugriff darauf moeglich
C:\C++\TESTPROJEKTE\BasisklassenZeiger\Haupt.cpp(18) : error C2653: 'AbKlasse' : Keine Klasse oder Namespace
C:\C++\TESTPROJEKTE\BasisklassenZeiger\Haupt.cpp(18) : error C2065: 'i' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.
BasisklassenZeiger.exe - 3 Fehler, 0 Warnung(en)
|
Ich glaube das "AbKlasse irgendwie nicht richtig erzeugt wird, wenn ich nähmlich nach der Erzeugung "AbKlasse::" schreibe um auf die Attribute zugreifen zu können kommen von VC6 keine vorschläge... |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 12.08.2002, 15:44 Titel: |
|
|
also habs mit einer alternative versucht weiß aber net obs dann noch so ist wies du willst *gg*
Code: | //Haupt.cpp
#include "Basisklasse.h"
#include "AbgeleiteteKlasse.h"
AbgeleiteteKlasse AbKlasse;
AbgeleiteteKlasse* pZeiger = &AbKlasse;
void Zugriff(AbgeleiteteKlasse* Zeiger)
{
Zeiger->ChangeI(40);
}
void main(void)
{
Zugriff(pZeiger);
AbKlasse.TestZahl(40);
} |
Code: | //Abgeleiteteklasse.h
#include <iostream.h>
#ifndef _ABGELEITETEKLASSE_H
#define _ABGELEITETEKLASSE_H
#include "Basisklasse.h"
class AbgeleiteteKlasse : BasisKlasse
{
public:
int b;
AbgeleiteteKlasse();
ChangeI(int changeto);
TestZahl(int Test);
};
#endif |
Code: | //Abgeleiteteklasse.cpp
#include "Abgeleiteteklasse.h"
AbgeleiteteKlasse::AbgeleiteteKlasse()
{
i = 20;
b = 30;
}
AbgeleiteteKlasse::ChangeI(int changeto)
{
i=changeto;
}
AbgeleiteteKlasse::TestZahl(int Test)
{
if(i = Test)
{
cout << "geht" << endl;
}
else
{
cout << "geht nicht" << endl;
}
} |
Code: | //Basisklasse.h
#ifndef _BASISKLASSE_H
#define _BASISKLASSE_H
class BasisKlasse
{
public:
int i;
BasisKlasse();
};
#endif |
Code: | //Basisklasse.cpp
#include "Basisklasse.h"
BasisKlasse::BasisKlasse()
{
this->i=10;
} |
|
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 12.08.2002, 17:47 Titel: |
|
|
Na ja, das ist nicht ganz das, was ich wollte...
Ich bin nähmlich gerade dabei ein Inventar zu programmieren und schon zu ca. 98 % fertig. Aber ich will bei verschiedenen Funktionen auf verschiedene Werte der Items zugreifen. Ich hab für die Items ne Basisklasse geschrieben, die halt die Grundwerte der Items beinhaltet (Preis, Image,...). In den Funktionen will ich aber immer nur auf diese Grundwerte zugreifen. Deshalb will ich ihnen bei der Deklaration als Parameter einen Basisklassen-Zeiger übergeben, bei dem Aufruf aber einen Zeiger auf eine abgeleitete Klasse (zb. cArmor) übergeben. Wie oben schon gesagt, klappt das nich so.
Aber ich glaube der einzige Fehler besteht darin, das ich das Objekt der abgeleiteten Klasse (AbKlasse) falsch erzeuge. Leider hab ich gerade mein Buch in dem OOP sehr gut beschrieben ist nich da, und in JLI-Spieleprogrammierung find ich einfach die Stelle nich... |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 12.08.2002, 18:35 Titel: |
|
|
Meiner Meinung ist das einzige was du falsch machst die Ableitung. Du musst schreiben class AbgeleiteteKlasse : public (!!) BasisKlasse. DAs sollte die Probleme beseitigen.
Aber das mit dem AbKlasse::i wird immer noch ned funzen weil du dazu i zu einer Klassenvariable machen müsstest. Wie das geht weis ich jetzt nicht. Du kannst höchstens AbKlasse.i schreiben das müsste gehen _________________ Es geht auch ohne |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 12.08.2002, 18:44 Titel: |
|
|
Vielen Dank an alle, die mitgeholfen haben!
@ MichaelEs klappt jetzt, das mit der Ableiteung hab ich schon nach deinem ersten Rat gemacht, aber ich musste noch so zugreifen wie du gesagt hast (.i) und ich hab zudem vergessen die Destruktoren zu Definieren.
Danach hat alles geklappt. |
|
Nach oben |
|
|
|