Fehler, Irrtümer, Fragen - Seite 246

 
AlexSTAL:

Dies ist eine Klassenmethode

https://www.mql5.com/ru/docs/standardlibrary/technicalindicators/cindicator

#include<Anzeiger}Anzeiger.mqh>

Ich verstehe. Offenbar hatdenkir#include<Indicators\Indicator.mqh> nicht deklariert.

Bei einer Suche in der Referenz ist diese Funktion jedoch nicht zu finden.

 
Urain:

Warum also flucht der Compiler, was ist die Zweideutigkeit des Aufrufs?


anscheinend werden int in long oder umgekehrt Typen umgewandelt, wahrscheinlich kann man nur nach der Anzahl der Parameter oder nach Typen, die nicht automatisch umgewandelt werden, Funktionen nachladen

SZZ: funktioniert nur mit long, int als Parameter wird automatisch in long umgewandelt.

 
IgorM:

anscheinend werden int in long oder umgekehrt Typen umgewandelt, wahrscheinlich kann man nur nach der Anzahl der Parameter oder nach Typen, die nicht automatisch umgewandelt werden, Funktionen nachladen

SZY: arbeitet nur mit long, int-Typen, die als Parameter übergeben werden, werden automatisch in long umgewandelt.

Dasselbe Lied.

class CA
  {
public:
   void set(long i,long j,long n){Print("перегрузка long");};
   void set(long i,long j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set(1,2,Int);
   a.set(1,2,Long);
  }

Es ging darum, das Überladen von Funktionen für alle Typen ohne Ausnahmen zu ermöglichen.

Und wenn ein Typ nicht mit den Codewerten i und j übereinstimmt, wird eine Warnung ausgegeben.

 
Urain:

Liebe Entwickler, bitte erklären Sie mir, was ein zweideutiger Aufruf einer überladenen Funktion ist (das ist es, worüber der Compiler flucht):

'set' - zweideutiger Aufruf einer überladenen Funktion



ja, es gibt einen Fehler, wir werden ihn nach der Veröffentlichung des Builds beheben

für den Moment können Sie verwenden

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set((int)1,(int)2,Int);
   a.set((int)1,(int)2,Long);
  }
 
Urain:

Es gibt kein Problem, nicht nur mit Überladung int und long, Überlastung jeder Art das Problem wird das gleiche sein.

Es ist nur so, dass der Compiler eine explizite Parametereinstellung anders behandelt.

Sorry, ich habe MT5 seit zwei Wochen nicht mehr laufen lassen, weil ich nach den letzten drei Updates so viele verärgerte Beiträge sehe, dass ich nicht einmal herausfinden möchte, ob der Compiler nicht funktioniert oder ob ich vielleicht den falschen Build habe, den Sie haben

wie diese:

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,double x){Print("перегрузка double");};
  };
  
void OnStart()
  {
//---
   CA a;
   int Int=3;
   double doubl=4;
   a.set(1,2,Int);
   a.set(1,2,doubl);
  }

es funktioniert, Build 362.

 
mql5:

Ja, das ist ein Fehler, den wir nach der Veröffentlichung des Builds beheben werden.

In der Zwischenzeit können Sie Folgendes verwenden

a.set((int)1,(int)2,Long);

Ich danke Ihnen. Wir werden das im Hinterkopf behalten.
 
Yedelkin:

Ich verstehe. Offenbar hatdenkir#include<Indicators\Indicator.mqh> nicht deklariert.

Aber eine Suche in der Referenz findet diese Funktion sowieso nicht.

Das ist nicht genug!

Dies ist eine Methode einer externen Klasse!!!

 
AlexSTAL:

Das ist noch nicht genug!

Dies ist eine externe Klassenmethode!!!

Nun, ich bin kein Experte, ich schreibe lieber alles mit der Hand. Könnten Siedenkir bitte Schritt für Schritt erklären, was zu tun ist?
 

Wahrscheinlich müssen wir so etwas hinzufügen:

#include <Arrays\Array.mqh>
#include <Arrays\ArrayObj.mqh>

Aber ich brauche kein Objekt der genannten Klassen. Was ich brauche, ist eine einfache Funktion für den von mir beschriebenen Basistyp string.

 
denkir:

Wahrscheinlich müssen wir so etwas hinzufügen:

Aber ich brauche kein Objekt der genannten Klassen. Und ich brauche eine einfache Funktion für den Basistyp string, die ich beschrieben habe.

Aber um zu den Methoden der Klasse zu gelangen, müssen Sie die entsprechende Klasse deklarieren, in unserem Fall ist es die Klasse CIndicator (MQL5 Referenz / Standardbibliothek / Klassen für die Arbeit mit Indikatoren / Basisklassen / CIndicator). Ist es nicht so?