Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 936

 
Igor Makanu:

Ancora: solo perché non hai avuto un errore di compilazione non significa che la tua classe template sia stata inclusa - dov'è l'oggetto classe CData? - Vedo una dichiarazione di template, ma dove si trova tale variabile? - oggetto?

se hai "vitale bisogno" di risolvere la questione, allora fai del codice completamente riproducibile - completamente senza ..... commenti a tua discrezione e di nuovo, non capisco la logica di usare la sostituzione delle macro

forse è questo il punto, io uso raramente le macro, almeno se uso una macro capisco cosa ne risulta alla fine, nel tuo esempio è un mistero per me

Sì, hai ragione, l'oggetto non è stato creato, quindi ho controllato

#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]);}

Non vedo perché ho bisogno di un tale linguaggio di programmazione e perché dovrei avere bisogno di tali classi se non posso nemmeno sovraccaricarle, tutto è morto e statico.

 
Come faccio a scrivere una lettera agli sviluppatori di mql4 come vedere il codice del compilatore, posso aggiungere altre caratteristiche in modo che non sia così statico?
 
Seric29:

Sì, hai ragione, l'oggetto non è stato creato, è così che ho controllato

Di conseguenza, l'overloading non è possibile, il che è un minus, quindi perché avrei bisogno di un tale linguaggio di programmazione e perché avrei bisogno di tali classi se non posso nemmeno sovraccaricare tutto è morto e statico?

Davvero?

Non lo sapevi.

Come fa la gente a scrivere cose complicate, allora? È al di là della comprensione...

 
Seric29:

Il compito della macro è chiamare la funzione dalla classe e passare il valore a questa funzione, e poiché la macro può prendere un array di qualsiasi dimensione, sto cercando di fare uno schema del genere. Naturalmente un sacco di pietre, ma ho bisogno di chiamare la funzione dalla classe e non so come chiamare una funzione semplice dalla classe (nel mio caso, il metodo Total non ha descrizione) non è scritto nella Guida, ci sono esempi complessi relativi al trasferimento.

Ecco un esempio: una macro prende una matrice di qualsiasi dimensione, è brutto che gli sviluppatori abbiano tagliato queste funzioni normali per lavorare con elementi complessi.

Puoi farlo senza un modello, ma è meglio con un modello.

Non volevo, ma ho aperto il terminale, ecco il tuo esempio:

#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
  }
//+------------------------------------------------------------------+

Ho commentato la sostituzione macro, il codice si compila, quindi non funziona? Ho chiesto tre volte perché un modello che non viene utilizzato e perché una sostituzione macro che duplica solo una parola chiave della lingua

Non solo non capisco cosa sia necessario, ma non capisco cosa fare con il codice che non si compila in parte.

HH: Se state cercando di fare un array multidimensionale usando questo modello o una macro - imho, non funzionerà, trovate una soluzione pronta cercando nel forum e usate

ZS: Sicuramente mi arrendo, non è una domanda per me.

 
Seric29:
Come faccio a scrivere una lettera agli sviluppatori di mql4 come vedere il codice del compilatore, posso aggiungere altre caratteristiche in modo che non sia così statico?

Non nel caso di mettere i pantaloni sopra la testa :)

 
Artyom Trishkin:

Davvero?

Non lo sapevi.

Come fa la gente a scrivere cose complesse, allora? È al di là della comprensione...

Bene, quanto complicato potete scrivere qui se l'accesso alla memoria è negato per lavorare con le funzioni dinamiche, anche l'overloading non è possibile, quindi dovete scrivere un extra di 1000 linee di codice per completare il vostro programma, avviare loop e variabili extra, quindi la performance del programma è 0.

 
Seric29:

Beh, cosa c'è di così difficile da scrivere se l'accesso alla memoria è negato, non puoi lavorare con funzioni dinamiche, anche l'overloading è impossibile, quindi devi scrivere 1000 linee di codice in più per finire il tuo programma, avviare loop e variabili extra, quindi la performance del programma è 0.

Beh, se la struttura del programma è inizialmente morta, sì, non c'è modo.

Il programma è scritto alla fine. In primo luogo, un approccio ponderato alla struttura del programma.

Onestamente non capisco perché state litigando da mesi con qualcosa che si fa in modo diverso e in cinque minuti. Davvero non capisco...

 
Igor Makanu:

Non volevo, ma ho aperto il mio terminale, ecco il tuo esempio:

Ho commentato la sostituzione macro, il codice si compila, quindi non funziona? Ho chiesto tre volte perché un modello che non viene utilizzato e perché una sostituzione macro che duplica solo una parola chiave della lingua

Non solo non capisco cosa è necessario, ma non capisco cosa fare con il codice che non si compila in parte.

HH: Se state cercando di fare un array multidimensionale usando questo modello o una macro - imho, non funzionerà, trovate una soluzione pronta cercando nel forum e usate

ZS: Sicuramente mi arrendo, non è una domanda per me.

Qui ho dato un esempio che la macroVosmas accetta qualsiasi array. L'unica soluzione per gli array è usare array della stessa dimensione, non sto parlando di tutti i tipi di puntatori e riferimenti e funzioni dinamiche che funzionano in c++, ed è anche un problema per l'output di una funzione in c++, specificare il tipo e altre cose, linguaggio troppo statico e tutto il resto, non si può scrivere la roba veramente cool qui.

 
Seric29:

Qui ho dato un esempio che la macroVosmas accetta qualsiasi array. L'unica soluzione per gli array è usare array della stessa dimensione, non sto parlando di tutti i tipi di puntatori e riferimenti e funzioni dinamiche che funzionano in C++, e anche il problema di derivare una funzione in C++ specifica il tipo e altre sciocchezze insomma un linguaggio troppo statico e tutto, non si possono scrivere cose veramente fighe qui.

Iniziate a leggere le basi del C++, MQL ha differenze minime!

ZS: complimenti, hai scritto una macro universale che può fare tutto, gli array sono la cosa più semplice che può "gestire", esempio da riprodurre:

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

inizia a leggere le basi del C++, MQL ha differenze minime!

ZS: complimenti, hai scritto una macro universale che può fare tutto, gli array sono la cosa più semplice che può "gestire", esempio da seguire:

Bene, volevo ottenere una presa su questo passando un array in una macro e nella macro chiamare una funzione sovraccaricabile e restituire il risultato, sembra un compito primitivo ma quando si chiama una funzione sovraccaricabile in una macro lancia un avviso che le funzioni 3 si scopre che nella macro è necessario scrivere un criterio che determinerà quale delle funzioni sovraccaricabili chiamare e qui di nuovo si deve chiedere come fare questo controllo, in generale l'idea fallisce.

Motivazione: