Zeiger auf Objekt mit Parameter übergeben
-
Hallo,
ich habe 2 Klassen. Ich möchte eine Methode der Klasse A über eine Methode in Klasse B aufrufen.
Pseudocode:
Klasse1
hat MethodeAsdKlasse2
hat MethodeTestMethodeTest will MethodeAsd aus Klasse1 aufrufen.
C++ Code:
class CKlasse1 { public: void mMethodeAsd(); } CKlasse1::mMethodeAsd() { //Hier steht dann code } class CKlasse2 { public: void mMethodeTest(CKlasse1 *Klasse); } CKlasse2::mMethodeTest(CKlasse1 *Klasse) { Klasse[2].mMethodeAsd(); //???? Klasse->mMethodeAsd(); //???? } void Main { CKlasse1* Klasse1[10]; CKlasse2* Klasse2; Klasse2.mMethodeTest(*Klasse1); }
Also Mein Problem ist, dass Klasse1 ein Array ist. Wenn ich auf z.b. das 2te Array zugreifen will, dann habe ich einen zugriffsfehler. Bei den ???? bin ich unsicher. Mit beiden versionen kommt mein Builder klar. Wie kann ich dieses Array Objekt übergeben und auch auf die ver. Objekte zugreifen?
Ich hoffe ihr versteht mich,
MfG Debut
-
Dein Aufruf müsste eher so aussehen:
Klasse2.mMethodeTest(Klasse1);
Zudem ist C++ eher
int main()
als
void Main
Also falscher Rückgabetyp, falscher Bezeichner und fehlende Klammern.
Und Klassen haben normalerweise ein Semikolon bei der schliessenden Klammer. Dein Code kompiliert aber hoffentlich nicht, oder?
-
Tut mir leid wegen den Tippfeghlern im Code.
Mein Projekt ist etwas unübesichtlicher und wollte es schnell vereinfacht haben und hab daran nicht gedacht.Wenn ich
Klasse2.mMethodeTest(Klasse1);
aufrufe, dann kommt der Fehler:
E2034 Cannot convert 'Klasse1 * *' to 'Klasse1 *'
E2342 Type mismatch in parameter [...]Wie muss dann der erwartete Parameter der Methode aussehen?
Wenn ich die Methode nur mit dem Code aufrufe kommt wie gesagt dieser Fehler.Ich erstelle die Objekte dazu in Main mit
Klasse1[i] = new CKlasse1;
Mein Grundproblem ist:
Ich muss über Main und über eine Methode in einer Klasse eine Methode einer anderen Klasse aufrufen. Bin dann auf die Idee gekommen die Objekte per Zeiger zu übergeben.
Gibt es eine Andere/Bessere Möglichkeit als meine?
Ich schaff es einfach nicht diese Array Objekte zu übergeben um es weiter zu verwenden.MfG
-
Klasse2[0]->mMethodeTest(Klasse1);
Allerdings stellt sich die Frage, ob es nötig ist das ganze als Array und dann noch per new anzufordern.
Du kannst auch ohne new Zeiger an eine Funktion übergeben.
void foo (CKlasse1* p) { //..use p } int main () { CKlasse1 klasse; foo ( &klasse ); }
Ansonsten mach ein lauffähiges, kleines Beispiel von deinem Problem. Dann ist das ganze auch besser nachzuvollziehen.
-
Debut schrieb:
void Main { CKlasse1* Klasse1[10]; CKlasse2* Klasse2; Klasse2.mMethodeTest(*Klasse1); }
da stimmt einiges nicht in den Argumenten.
zumindest mal mußt du:Klasse2 -> mMethodeTest(*Klasse1);
Außerdem bin ich nicht sicher, daß du wirklich CKlasse1* Klasse1[10] meinst - CKlasse1 Klasse1[10]
wäre nämlich bereits ein Zeiger (von der Art CKlasse1*) - das würde dann zum Aufrufformat von
mMethodeTest(CKlasse1 *Klasse1) passen.Vielleicht liest Du Dir mal in einem C++ Buch die Bedeutung von * (Inhaltsoperator)
und & (Adreßoperator) genau durch?
-
Ich habe mein Aktuelles Programm hochgeladen.
www.fabif.de/TunirplanungV2.rar
Ich hoffe die Kommentare helfen.
Ich benutze Borland C++ Builder 6 unter Vista.die Klasse CSpielplan.cpp (CSpielplan.h)
ist die Klasse deren Methode mit dem Array Objekt aufgerufen wird.CMannschaft und CBegegnung, bzw die Klassen die davon erben also CFussballMannscahft usw. soll zugegriffen werden können.
Wie ihr seht könnt ihr bisjetzt Mannschaften erzeugen und löschen.
Ich gehe in die 12te Klasse eines Technischen Gymnasiums. Mich würde auch off toppic rückmeldung über meinen Stil und wie ich es aufgebaut habe freuen. Habe meine Codes noch nie so richtig jemandem gezeigtMfG Debut