MetaTrader 5 herunterladen

MQL5: Interface in ArrayObjekt.Add() verwenden

Einloggen oder registrieren, um einen Kommentar zu schreiben
fx-trading
7
fx-trading  

Hallo MQL-Kollegen, 

ich habe Probleme bei der Verwendung von Interfaces in MQL5 im Zusammenhang mit der Methodik CArrayObject.add() wie folgt: 

CArrayObj _messages;

bool CLogger::addMessage(IMessage* msg){

 ... // 
   return messages.Add(msg);
}

Fehlermeldung: 'msg' parameter conversion not allowed

Ursache: Die Methode Add((CObject* element) erwartet ein CObject Element. Das Interface IMessage ist jedoch nicht von CObject abgeleitet (Interfaces können nur von anderen Interfaces abgeleitet werden). 

Hintergrund: Ich möchte verschiedene Arten von 'Messages' dem ArrayObjekt hinzufügen. Um dies zu realisieren wollte ich in der dargestellten Code-Stelle das Interface verwenden, da an dieser Stelle die verschiedenen Typen von Messages verwendet werden sollen. 


Ein weiterer Versuch war eine Implementierung einer AbstractMessage-Klasse zu implementieren welche dann die "Schnittstelle" zwischen Implementierten Message-Klassen und dem Interface fungiert. Leider besteht dann das Problem, dass in MQL5 kein multiples Ableiten möglich ist, denn dann müsste es im Klassenkopf heißen: 

class AbstractMessage : public IMessage, CArrayObj


Vielleicht hatte jemand bereits ein ähnliches Problem und kann mir hierbei helfen. Ich sehe nämlich derzeit nur die Lösung das Interface zu löschen und die Abstrakte Klasse von CObject abzuleiten - ich würde aber eine Lösung mit Verwendung des Interfaces bevorzugen. 

Ich hoffe ich konnte das Grundproblem ausreichend gut erläutern - falls weitere Informationen notwendig sind bitte ich um kurze Rückmeldung.

Besten Dank schon einmal an Alle!

Christian
1993
Christian  

Was spricht denn dagegen die IMessage Klasse von CObject abzuleiten ? .Wo kommt IMessage her ? 

Ich muss es auch so machen um eine Pointer Liste mit Clist zu erstellen.

Gruß Christian

Einloggen oder registrieren, um einen Kommentar zu schreiben