Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MT4 incompatible types - WARUM?

Geschrieben

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?

Featured Replies

Geschrieben

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

Geschrieben
  • Autor

Der Code steht in der Start() Funktion bis auf fSisLetzterBalken(...) der ist ausserhalb

Wenn 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 :-(

Geschrieben

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

Geschrieben
  • Autor
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

Call by Ref geht. Die ganze Array und den Index?

Werde ich gleich mal versuchen danke :-)

Geschrieben
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 ;)

Geschrieben
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.
Geschrieben
  • Autor

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

Geschrieben
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

Geschrieben
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.

Geschrieben
  • Autor

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 :sad:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.