Geschrieben 8. Juni 201016 Jr. comment_100226 Jetzt hätte ich auch mal eine MT4 Frage mit der Bitte um Unterstützung.Code:int U[20],O[20],H[20],L[20],C[20]; int i, y; ..... for (i=pos,y=0;i<pos+9;i++,y++) { fSisLetzterBalken(U[y],O[y],H[y],L[y],C[y], //// ← HIER SOLL DER FEHLER SEIN Open[i],High[i],Low[i],Close[i], Open[i+1],High[i+1],Low[i+1],Close[i+1]); ..... } ..... void fSisLetzterBalken (int& qU, int& qO, int& qH, int& qL, int& qC, double O0, double H0, double L0, double C0, double O1, double H1, double L1, double C1) { ..... } Jetzt gibt er mir eine Fehlermeldung beim Kompilieren:'U' - incompatible types'O' - incompatible types'L' - incompatible types'C' - incompatible typesund zeigt auf den Funktionsaufruf.Array wurde als Int deklariert und ich übergebe der Funktion einen bestimmten Wert innerhalb dieses Arrays.Da diese Übergebende Variable auch einen Rückwert erhält wollte ich keine Konvertierung vornehmen. Wie löse ich dieses "incompatible types" Problem? Melden
Geschrieben 8. Juni 201016 Jr. comment_100239 Mh sehr merkwürdig. Ich habe deinen Code einfach mal kopiert. Aber egal was ich schreibe. Ich komme nicht auf den gleichen Fehler wie du .... Viele Grüße,Rumpel Melden
Geschrieben 8. Juni 201016 Jr. Autor comment_100240 Der Code steht in der Start() Funktion bis auf fSisLetzterBalken(...) der ist ausserhalbWenn du ihn einfach kopierst dann musst aber noch ein int pos; mit rein.Geht der Code bei dir? Der zeigt doch bestimmt andere Fehler an. Hab den jetzt auch mal so kopiert in einem neuen IndikatorFrame und der zeigt immernoch diesen Fehler an :-( Melden
Geschrieben 8. Juni 201016 Jr. comment_100241 Doch ich krieg den gleichen Fehler, aber: Ich wusste gar nicht das MQL Call by Reference kann... Sicher das das geht? Arrays als Funktionsparameter gehen:void function(int& array[]) { ... } (auch wenn das nirgends steht, sondern nur im dll-sample verwendet wird *grmpf*) aber direkt als Call by Ref hab ichs noch nicht gesehen/gemacht.Am besten du übergibst die Arrays und den Index... wär zumindest ein workaround Melden
Geschrieben 8. Juni 201016 Jr. Autor comment_100242 aber direkt als Call by Ref hab ichs noch nicht gesehen/gemacht.Am besten du übergibst die Arrays und den Index... wär zumindest ein workaroundCall by Ref geht. Die ganze Array und den Index?Werde ich gleich mal versuchen danke :-) Melden
Geschrieben 8. Juni 201016 Jr. comment_100243 Call by Ref geht. Die ganze Array und den Index?Werde ich gleich mal versuchen danke :-) stimmt, normales int geht... was man nicht alles dazulernt ;) vermutlich ist ein element in einem int-array intern nicht mehr ein normales int, das man zwar auf int umwandeln kann, aber nicht als int-ref übergeben... Arrays sind in MQL ja auch nicht das was man sich in C darunter vorstellt (so mit konstanter zugriffszeit und so ;) Melden
Geschrieben 8. Juni 201016 Jr. comment_100244 Also im MQL4 Board habe ich gerade gesehen das eine solche Fehlermeldung auftreten kann wenn der Rückgabewert von deiner Funktion ein anderer ist als du in der Definition angegeben hast. Melden
Geschrieben 8. Juni 201016 Jr. Autor comment_100245 Call by Ref geht aber anscheinend nicht an einem Array zurück.Array incl. Index übergeben hat nicht funktioniert.Das hier schon: fSisLetzterBalken(U[y],O[y],H[y],L[y],C[y], a1,a2,a3,a4,a5, Open[i],High[i],Low[i],Close[i], Open[i+1],High[i+1],Low[i+1],Close[i+1]); ...... void fSisLetzterBalken (int qU, int qO, int qH, int qL, int qC, int& b1, int& b2, int& b3, int& b4, int& b5, double O0, double H0, double L0, double C0, double O1, double H1, double L1, double C1) Das soll mal einer verstehen warum ich den Umweg über einen zusätzlichen Int gehen muss den ich natürlich nach der Funktion den entsprechenden Array zuweisen muss. DANKE euch für die Hilfe Melden
Geschrieben 9. Juni 201016 Jr. comment_100252 Das soll mal einer verstehen warum ich den Umweg über einen zusätzlichen Int gehen muss den ich natürlich nach der Funktion den entsprechenden Array zuweisen muss.CallByRef nutze ich bei meinem MTEC, das funktioniert recht gut. Aber ich habe gerade mal deinen Code getestet und CallByRef für ein Element aus einem Array scheint nicht zu gehen. Alternative: du übergibst das ganze Array by Reference und müsstest als weiteren Parameter den Index mitteilen. Etwa so: void fSisLetzterBalken (int index, int& qU[], int& qO[], int& qH[], int& qL[], int& qC[], double O0, double H0, double L0, double C0, double O1, double H1, double L1, double C1) { } ... int U[20],O[20],H[20],L[20],C[20]; int ii, y, pos; pos = 1; for (ii=pos,y=0;ii<pos+9;ii++,y++) { fSisLetzterBalken(y,U,O,H,L,C, Open[ii],High[ii],Low[ii],Close[ii], Open[ii+1],High[ii+1],Low[ii+1],Close[ii+1]); } ... Habe das jetzt nicht mit Zahlen ausprobiert, lässt sich aber kompilieren. edit: Äh, Mythos hat das auch geschrieben, vielleicht sollte ich vorher besser lesen. Ich kann zumindest bestätigen, dass es nicht nur im Sample funktioniert. edit2: Habe es jetzt auch mit Zahlen getestet - läuft. RAiNWORM Melden
Geschrieben 9. Juni 201016 Jr. comment_100255 Array incl. Index übergeben hat nicht funktioniert. ? hmmm, bei mir schon. Wie hast es denn probiert? weil das zusätzliche int ist zwar ne Lösung aber doch weiter weg von "schön" als die arrays zu übergeben und zu sagen welcher Index verändert werden soll. Also ich habs mit ziemlich dem gleichen Code versucht wie Rainworm, hat funktioniert. Melden
Geschrieben 9. Juni 201016 Jr. Autor comment_100272 ok... Das ist mir jetzt peinlich.Es war ne lange Nacht gestern. Jetzt geht es auch bei mir mit eurem Vorschlag.Schön ist auch nicht dass ich so viele double (Close, High usw.) Werte in die Funktion mit übergebe statt einfach nur "i" und die Funktion selbst Close usw. holt. Super Support hier Melden
Jetzt hätte ich auch mal eine MT4 Frage mit der Bitte um Unterstützung.
Code:
int U[20],O[20],H[20],L[20],C[20]; int i, y; ..... for (i=pos,y=0;i<pos+9;i++,y++) { fSisLetzterBalken(U[y],O[y],H[y],L[y],C[y], //// ← HIER SOLL DER FEHLER SEIN Open[i],High[i],Low[i],Close[i], Open[i+1],High[i+1],Low[i+1],Close[i+1]); ..... } ..... void fSisLetzterBalken (int& qU, int& qO, int& qH, int& qL, int& qC, double O0, double H0, double L0, double C0, double O1, double H1, double L1, double C1) { ..... }Jetzt gibt er mir eine Fehlermeldung beim Kompilieren:
'U' - incompatible types
'O' - incompatible types
'L' - incompatible types
'C' - incompatible types
und zeigt auf den Funktionsaufruf.
Array wurde als Int deklariert und ich übergebe der Funktion einen bestimmten Wert innerhalb dieses Arrays.
Da diese Übergebende Variable auch einen Rückwert erhält wollte ich keine Konvertierung vornehmen.
Wie löse ich dieses "incompatible types" Problem?