Na dann versuch: void getObject ( int id, classBase* &pointer ){ ..
oder classBase* pointer = getObject(int id){ ..
Ich habe 'meinen' code (mit *) nicht probiert, aber kann es sein, dass ohne * aus pointer das Objekt wird - kind of cast?
Bist Du mit dem Debugger durch Deinen Code gegangen?
Naja ...waren vielleicht gestern zu viele Bäume im Wald :D
Das ist mir auch schon passiert ;)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo zusammen,
ich knabbere schon den ganzen Tag an dem Problem und komm da nicht weiter.
Also ich habe eine Liste mit geladenen Objekten ( class1 und class2 ). Beide Verfügen z.B. über eine Funktion namens printMsg().
Ich möchte nun über eine Funktion mir den Pointer der auf zurufenden Klasse geben lassen.
Soweit ich gelesen habe kann man mit "&" eine Referenze übergeben und somit sollte ich z.B. in meiner Funktion auf Methoden der referenzierten Object drauf zugreifen können.
Wenn ich z.B.:
void changeName(string &name) { name=Frank; }
string my_name = "Fritz";
changeName(my_name);
mache, dann hat zum Schluss die Variable my_name den Namen Frank.
Sobald ich das aber mit einem Object versuche, bekomme ich keine Referenz zurück. Hier mal ein Beispiel:
class classBase {
public:
virtual void printMsg() {};
};
//*******************************************************************
class class1 : public classBase {
private:
protected:
public:
void class1(){Print(__FUNCTION__," Constructor");}
void ~class1(){Print(__FUNCTION__," Destructor");}
void printMsg();
};
void class1::printMsg() {
Print(__FUNCTION__, "INFO: printMsg class1...............");
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class class2 : public classBase {
private:
protected:
public:
void class2(){Print(__FUNCTION__," Constructor");}
void ~class2(){Print(__FUNCTION__," Destructor");}
void printMsg();
};
void class2::printMsg() {
Print(__FUNCTION__, "INFO: printMsg class2...............");
}
//**************************************************************************************************************************************//
classBase* classList[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit(){
Print("****************************************************************");
// resizing of an array
ArrayResize(classList,ArraySize(classList)+2);
// add a object to list
classList[0] = new class1;
classList[1] = new class2;
// get object pointer
classBase* object;
getObject(1,object);
object.printMsg();
return(INIT_SUCCEEDED);
}
void getObject ( int id, classBase &pointer ) {
if(CheckPointer(GetPointer(classList[id])) !=POINTER_INVALID ) {
Print("INFO: Found object pointer... ");
pointer = GetPointer(classList[id]);
pointer.printMsg();
Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}else{
Print("ERROR: No object found....");
}
}
Nach dem Aufrufen der Funktion getObject bleibt die Object Variable leer: object.printMsg();
Aber innerhalb der Funktion greift er auf die Funktion "pointer.printMsg();" Problemlos zu.
Wenn ich die Funktion mit Referenze aufrufe, dann gibts ein Fatal Error:
void getObject ( int id, classBase &pointer ) { ...}
Kann mir da bitte jemand helfen ? Danke