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

 
Seric29:

Un puntatore a una funzione viene passato come parametro. Vedo che nessuno ha capito come fare questo con le classi. Inoltre non mi è ancora chiaro perché dovrebbe essere restituito un puntatore a una classe.

Qui ci sono dei campioni interessanti ma non sono rilevanti per la mia domanda.

Ho anche visto qualcosa di simile nella guida, ma ho già chiuso questi siti perché mi fanno male le mani e ho del lavoro da fare.

Perché dovrei giocare con un compito così semplice? Potete semplicemente ottenere i dati necessari attraverso un oggetto di classe

Ho familiarità con riferimenti, puntatori e puntatori a funzioni, ma li uso raramente nella pratica. E in generale, penso che siano necessari solo per il risparmio di memoria - e gli Expert Advisors con gli indicatori non sono giochi, quindi possiamo gestire con variabili comuni e oggetti di classe nell'ambito globale

 
Alexandr Sokolov:

Perché andare così lontano con un compito così semplice? Potete semplicemente ottenere i dati richiesti attraverso un oggetto di classe

Ho familiarità con riferimenti, puntatori e puntatori a funzioni, ma li uso raramente. A mio avviso, sono necessari solo per il risparmio di memoria, gli Expert Advisors con indicatori non sono giochi, quindi, possiamo usare variabili ordinarie e oggetti di classe nell'ambito globale.

Non voglio diventare fantasioso su un compito semplice, e naturalmente, modifico i miei programmi dove la funzione è stata chiamata prima, scrivo un'espressione aritmetica per semplificare i calcoli o passo a una funzione semplificata sovraccaricata, quindi voglio tradurre il programma in classi. Ma come hai scritto sopra e raramente li usano, e ora la domanda è le classi ci sono ma creare puntatori a funzioni di questa classe è impossibile, perché questo tipo di programmazione è necessario, se si fa uno non si può fare l'altro, non è la programmazione ma il diavolo sa cosa.

 
Seric29:

Non voglio diventare fantasioso su un compito semplice, e naturalmente rifaccio i miei programmi dove prima veniva chiamata una funzione, scrivo un'espressione aritmetica per semplificare i calcoli o passo a una funzione semplificata sovraccaricata, quindi voglio tradurre il programma in classi. Ma come hai scritto sopra e raramente li usi, e ora la domanda è le classi ci sono ma creare puntatori a funzioni di questa classe è impossibile, perché questo tipo di programmazione è necessario, se fai uno non puoi fare l'altro, non è programmazione ma il diavolo sa cosa.

Una classe è un modello di qualche oggetto, e per usare la funzionalità che è in questo modello - dovete prima creare un oggetto.

In sostanza, il nome della classe agisce come un tipo di dati, come int, double, string, etc., ma con funzionalità estese. Non si può dichiarare una variabile senza specificarne il tipo.

E per di più, potete semplicemente staccare la funzione dalla classe e può essere usata nella classe e separatamente dalla classe senza creare un oggetto

 

Ci può essere qualche altra ragione per cui l'indicatore non funziona, a parte il fatto che il suo file è stato cancellato dalla cartella appropriata? (l'indicatore è compilato e funziona in un terminale, ma non in un altro)


 
Alexandr Sokolov:

La classe è un modello di qualche oggetto, e per usare la funzionalità che si trova in questo modello - dovete prima creare un oggetto.

Infatti, il nome della classe agisce come un tipo di dati, come int, double, string, ecc., ma con funzionalità estese. Non si può dichiarare una variabile senza specificarne il tipo.

E per di più, potete semplicemente staccare la funzione dalla classe e può essere usata nella classe e separatamente dalla classe senza creare un oggetto

A meno che. Beh, è solo che le classi sono un argomento complicato, e il libro di riferimento è pieno di esempi sul trasferimento, sulla creazione di collegamenti e puntatori, penso che sia possibile (almeno in c++ è possibile ma mql4 non ha nulla a che fare con c++), è necessario capire come funziona. Aiuto ha mostrato questi esempi che sono molto complicati e sovraccarichi, invece di prendere una classe e mostrare un esempio semplice lo hanno sovraccaricato con calcoli e informazioni extra e non riesco a capire cosa vogliono dire, ho chiuso tutti questi link a causa della stanchezza e dell'esaurimento. Ok, quindi estrarrò le funzioni dalla classe.

 
Alexandr Sokolov:

Ci può essere qualche altra ragione per cui l'indicatore non funziona, a parte il fatto che il suo file è stato cancellato dalla cartella appropriata? (l'indicatore è compilato e funziona in un terminale ma non in un altro)


Dal mercato?

 
Alexandr Sokolov:

Ci può essere qualche altra ragione per cui l'indicatore non funziona, a parte il fatto che il suo file è stato cancellato dalla cartella appropriata? (l'indicatore è compilato e funziona in un terminale, ma non funziona in un altro)


vedere i messaggi nel terminale e nei log di Expert Advisor

il tuo screenshot mostra solo che questo indicatore non ha codice sorgente

 
Alexandr Sokolov:

Ci può essere qualche altra ragione per cui l'indicatore non funziona, a parte il fatto che il suo file è stato cancellato dalla cartella appropriata? (l'indicatore è compilato e funziona in un terminale, ma non in un altro)


Forse ha bisogno di librerie aggiuntive
 
Сергей Таболин:

Dal mercato?

No

Igor Makanu:

vedere i messaggi nel terminale e nei log di Expert Advisor

Il tuo screenshot mostra solo che questo indicatore non ha una fonte

Grazie

MakarFX:
Forse ha bisogno di librerie aggiuntive

Esattamente no, l'ho scritto io - lo saprei

 

Per favore ditemi perché il compilatore genera un avvertimento nel seguente codice dello script di test MQL4:

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Un avvertimento alla linea 27 su una mancata corrispondenza del tipo di dati. Entrambe le variabili hanno lo stesso tipo int. Qui sotto c'è uno screenshot della compilazione dello script.

Se sostituisco la linea 27 con

sig[j+1].age=(int)t;

l'avvertimento non appare.

Qual è il trucco?

Motivazione: