Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 936

 
Igor Makanu:

noch einmal: nur weil Sie keinen Kompilierfehler erhalten haben, bedeutet das nicht, dass Ihre Vorlagenklasse enthalten war - wo ist das CData-Klassenobjekt? - Ich sehe eine Mustererklärung, aber wo ist eine solche Variable? - Objekt ?

wenn Sie die Frage "unbedingt" lösen müssen, dann erstellen Sie vollständig reproduzierbaren Code - ganz ohne ..... Kommentare nach Ihrem Ermessen und noch einmal, ich verstehe die Logik der Verwendung von Makrosubstitution nicht

vielleicht ist das der Punkt, ich verwende selten Makros, zumindest wenn ich ein Makro verwende, verstehe ich, was es letztendlich ergibt, in Ihrem Beispiel ist es mir ein Rätsel

Ja, Sie haben recht, das Objekt wurde nicht erstellt, also habe ich es überprüft

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define  templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д


#define  Vosmas(a,b,c,d,e) /*return*/(Fun(a,b,c,d,e))//a- массив, 
                                                    //b- номер строки если нужен
                                                    //c,d- номера измерений если нужны и массив многомерный

int Mas[2],Mas2[2][2],Mas3[2][2][2];

int OnInit()
{int Perem=0;
 Perem=Vosmas(Mas,0,0,0,3);
 Print("Vosmas: ",Perem);//результат 3
return(INIT_SUCCEEDED);}

class CData{
public:CData(){};~CData(){};

       int Total(int &mas[]    ,int y1=0){return(mas[y1]);}  
       int Total(int &mas[][]  ,int y1=0/*,int y=0*/){return(mas[y1][0]);}
       int Total(int &mas[][][],int y1=0/*,int y=0,int u=0*/){return(mas[y1][0][0]);}};
       
         
templ(T) T Fun(T &a[],int b,int c,int d,int e){a[b]=e; return (a[b]);}

Ich sehe nicht ein, warum ich eine solche Programmiersprache brauche, und warum sollte ich solche Klassen brauchen, wenn ich sie nicht einmal überladen kann, alles ist tot und statisch.

 
Wie schreibe ich einen Brief an die mql4-Entwickler, um den Compiler-Code zu sehen, kann ich mehr Funktionen hinzufügen, damit er nicht so statisch ist?
 
Seric29:

Ja, Sie haben recht, das Objekt wurde nicht erstellt, so habe ich es überprüft.

Das Ergebnis ist, dass Überladung nicht möglich ist, was ein Minuspunkt ist. Wozu brauche ich also eine solche Programmiersprache und wozu brauche ich solche Klassen, wenn ich nicht einmal überladen kann, alles tot und statisch ist?

Wirklich?

Das wusstest du nicht.

Wie schreibt man dann komplizierte Dinge? Es ist unfassbar...

 
Seric29:

Die Aufgabe des Makros ist es, die Funktion aus der Klasse aufzurufen und den Wert an diese Funktion zu übergeben, und da das Makro ein Array beliebiger Dimension annehmen kann, versuche ich, ein solches Schema zu erstellen. Natürlich eine Menge Steine, aber ich brauche, um die Funktion aus der Klasse aufrufen und ich weiß nicht, wie man eine einfache Funktion aus der Klasse aufrufen (in meinem Fall, die Methode Total hat keine Beschreibung) ist nicht in der Hilfe geschrieben, gibt es komplexe Beispiele im Zusammenhang mit der Übertragung.

Hier ist ein Beispiel ein Makro nimmt ein Array von beliebiger Dimension, es ist schlecht, dass die Entwickler diese Funktionen normale Arbeit mit komplexen Elementen geschnitten haben

Man kann es auch ohne Vorlage machen, aber mit einer Vorlage ist es besser.

Ich wollte es nicht, aber ich habe das Terminal geöffnet, hier ist Ihr Beispiel:

#property strict
#property  show_inputs
//+------------------------------------------------------------------+
//#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+

Ich habe die Makro-Substitution auskommentiert, der Code lässt sich kompilieren, also funktioniert es nicht? Ich habe dreimal gefragt, warum eine Vorlage, die nicht verwendet wird, und warum eine Makro-Substitution, die nur ein Schlüsselwort der Sprache dupliziert

Ich verstehe nicht nur nicht, was benötigt wird, sondern auch nicht, was ich mit dem Code machen soll, der sich teilweise nicht kompilieren lässt.

HH: Wenn Sie versuchen, ein mehrdimensionales Array mit dieser Vorlage oder ein Makro zu machen - imho, wird nicht funktionieren, finden Sie eine fertige Lösung durch die Suche durch das Forum und verwenden

ZS: Ich gebe definitiv auf, das ist für mich keine Frage.

 
Seric29:
Wie schreibe ich einen Brief an die mql4-Entwickler, um den Compiler-Code zu sehen, kann ich mehr Funktionen hinzufügen, damit er nicht so statisch ist?

Nicht, wenn man die Hose über den Kopf zieht :)

 
Artyom Trishkin:

Wirklich?

Das wusstest du nicht.

Wie schreibt man dann komplexe Dinge? Es ist unfassbar...

Nun, wie kompliziert kann man hier schreiben, wenn der Speicherzugriff verweigert wird, um mit dynamischen Funktionen zu arbeiten, sogar Überladen ist nicht möglich, also muss man 1000 zusätzliche Codezeilen schreiben, um das Programm zu vervollständigen, zusätzliche Schleifen und Variablen zu initiieren, daher ist die Leistung des Programms 0.

 
Seric29:

Nun, was ist so schwer zu schreiben, wenn der Speicherzugriff verweigert wird, man kann nicht mit dynamischen Funktionen arbeiten, sogar Überladen ist unmöglich, also muss man 1000 zusätzliche Codezeilen schreiben, um das Programm zu beenden, zusätzliche Schleifen und Variablen einführen, daher ist die Leistung des Programms 0.

Nun, wenn die Programmstruktur von vornherein tot ist, dann gibt es keinen Weg.

Das Programm wird ganz am Ende geschrieben. Erstens: ein durchdachter Ansatz für die Programmstruktur.

Ich verstehe ehrlich gesagt nicht, warum Sie sich seit Monaten mit etwas herumschlagen, das anders und in fünf Minuten erledigt ist. Ich verstehe das wirklich nicht...

 
Igor Makanu:

Ich wollte es nicht, aber ich habe mein Terminal geöffnet, hier ist dein Beispiel:

Ich habe die Makro-Substitution auskommentiert, der Code lässt sich kompilieren, also funktioniert es nicht? Ich habe dreimal gefragt, warum ein Muster, das nicht verwendet wird, und warum eine Makro-Substitution, die nur ein Schlüsselwort der Sprache dupliziert

Ich verstehe nicht nur nicht, was benötigt wird, sondern auch nicht, was ich mit dem Code machen soll, der sich teilweise nicht kompilieren lässt.

HH: Wenn Sie versuchen, ein mehrdimensionales Array mit dieser Vorlage oder ein Makro zu machen - imho, wird nicht funktionieren, finden Sie eine fertige Lösung durch die Suche durch das Forum und verwenden

ZS: Ich gebe definitiv auf, das ist für mich keine Frage.

Hier habe ich ein Beispiel gegeben, dassVosmas Makro beliebige Arrays akzeptiert. Die einzige Lösung für Arrays ist die Verwendung von Arrays der gleichen Dimension, ich spreche nicht über alle Arten von Zeigern und Verweisen und dynamischen Funktionen, die in C++ funktionieren, und auch das Problem, eine Funktion in C++ auszugeben, Typ und andere Dinge anzugeben, ist zu statisch Sprache, können Sie nicht schreiben die wirklich coolen Sachen hier.

 
Seric29:

Hier habe ich ein Beispiel gegeben, dassVosmas Makro beliebige Arrays akzeptiert. Die einzige Lösung für Arrays ist es, Arrays der gleichen Dimension zu verwenden, ich spreche nicht über alle Arten von Zeigern und Referenzen und dynamischen Funktionen, die in C++ funktionieren, und auch das Problem der Ableitung einer Funktion in C++ angeben Typ und anderen Unsinn in kurzen zu statischen Sprache und alle, können Sie nicht wirklich coole Dinge hier zu schreiben.

Beginnen Sie mit der Lektüre der C++ Grundlagen, MQL hat minimale Unterschiede!

ZS: Glückwunsch, Sie haben ein universelles Makro geschrieben, das alles kann, Arrays sind die einfachste Sache, die es "handhaben" kann, Beispiel zu reproduzieren:

#property strict
#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
   
   class CA{public: int a;} A;
   class CB{public: int b;} B;
   class CC{public: int c;} C;
   class CD{public: int d;} D;
   class CE{public: int e;} E;
   Perem=Vosmas(A,B,C,D,E);     Print("Vosmas: ",Perem);//во всех случаях результат 5
   Perem=Vosmas("УРА","Я","УЧУ","MQL","4");     Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

fangen Sie an, die C++-Grundlagen zu lesen, MQL hat minimale Unterschiede!

ZS: herzlichen Glückwunsch, Sie haben ein universelles Makro geschrieben, das alles kann, Arrays sind das Einfachste, was es "handhaben" kann, Beispiel zu folgen:

Nun, ich wollte einen Griff auf diese durch die Übergabe eines Arrays in ein Makro und in der Makro rufen Sie eine überladbare Funktion und geben Sie das Ergebnis, scheint wie eine primitive Aufgabe, aber wenn Sie eine überladbare Funktion in einem Makro es wirft eine Warnung, dass Funktionen 3 stellt sich heraus, dass in der Makro müssen Sie ein Kriterium, das bestimmt, welche der überladbaren Funktionen zu rufen und hier wieder haben Sie zu fragen, wie man diese Prüfung zu tun, im Allgemeinen die Idee scheitert.

Grund der Beschwerde: