Errori, bug, domande - pagina 1768

 
fxsaber:
Questo è possibile solo in un compilatore muto. Lo sai tu stesso.
Il compilatore C++ non ci penserà per voi.
#include <iostream>
using namespace std;
struct S
{
    S operator +(const S&) {cout << "operator +\n"; return S{};}
};
S operator ""_s(const char*, size_t) {cout << "literal operator\n"; return S{};}
int main()
{
    cout << "___literal concatenation example___\n";
    S s = "sd"_s "sf"_s;
    cout << "___operator+ example___\n";
    S s2 = "sd"_s + "sf"_s;
}
L'uscita:
Esempio di concatenazione letterale___
operatore letterale
___operatore+ esempio___
operatore letterale
operatore letterale

operatore +

Come potete vedere, l'operatore+ non è stato sostituito dalla concatenazione nel secondo caso (creato per letterale con successiva aggiunta run-time). Il compilatore semplicemente non può tagliarlo fuori perché il programmatore ha troppe possibilità, il che limita molto la portata dell'ottimizzazione. Questo non è MKL, ovviamente, può essere diverso, ma l'affermazione stessa: "un compilatore normale farà tutto per me" è sbagliata.
 
pavlick_:
Questo non è MQL, ovviamente, può essere diverso, ma l'affermazione "un normale compilatore farà tutto per me" è errata.
Beh, dato che non ci sono tali operatori in MQL, allora è logico non avere alcuna funzione associata ad essi. Non voglio discutere dei compilatori, perché non sono affatto un programmatore. Conosco solo un po' di MQL.
 

Stanco di perdere tempo e denaro: l'ottimizzatore si blocca all'ultimo passaggio. Gli agenti non fanno nulla, tutto è in fase di Autorizzazione. C'è silenzio nel registro. Non ha senso attivare/disattivare gli agenti, tutto ricomincia da zero dopo il riavvio dell'ottimizzazione.

Chi ha affrontato questo problema? Come combatterlo?

File:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

Linea magica

Sequenza di operazioni in MetaEditor\1495 ad una risoluzione dello schermo di 1024x768 :

  • Aprire il file allegato
  • Spostare il cursore di scorrimento orizzontale tutto a destra (come nell'immagine)
  • Nella terza linea clicca su /*12345*/
Altre impostazioni: Service/Settings/General/Tabulation 4 caratteri
File:
Test.mq5  2 kb
 

Quando si tenta di convertire una stringa in un numero usando StringToInteger(), se la stringa non contiene un numero, restituisce 0 senza un errore (GetLastError() = 0). Se i parametri di input contengono una stringa e l'utente ha specificato i valori in modo errato - la funzione restituirà un valore errato e nessun errore. Questo è male.

Inoltre, se la stringa contiene una rappresentazione numerica errata, per esempio, 5o (invece di 50), la funzione restituirà il valore 5 senza generare un errore. Non solo non è 0, ma la funzione rompe la stringa come 5, che è di nuovo sbagliato.

Per favore, cari sviluppatori, migliorate la funzione aggiungendo codici di errore o se non può analizzare la stringa, restituite il valore LONG_MAX + l'errore in modo che possiamo determinare cosa c'è di sbagliato. Non potete farlo ora.

Controllo del codice dello script:

#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value="05";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   const long iValue=StringToInteger(value);
   Print("iValue = ",iValue,", lastError = ",GetLastError());
  }
//+------------------------------------------------------------------+
 

Implementate la vostra versione della funzione - non dovrebbe richiedere più di 10 minuti.

Non cambieremo il comportamento delle funzioni del sistema.

 
Renat Fatkhullin:

Implementate la vostra versione della funzione - non dovrebbe richiedere più di 10 minuti.

Non cambieremo il comportamento delle funzioni del sistema.

Quindi non pensi che sia necessario raffinare le funzioni, specialmente le funzioni che possono ovviamente mentire?

Anche se aggiungessimo solo dei codici di errore, sarebbe ok, ma ora state suggerendo di reinventare la ruota. Non una complicata, naturalmente, ma una bicicletta.

 
Alexey Kozitsyn:

Quindi non pensi che sia necessario raffinare le funzioni, specialmente le funzioni che possono ovviamente mentire?

Anche se si aggiungessero solo i codici di errore, andrebbe bene, ma ora si sta proponendo di reinventare la ruota. Non una complicata, naturalmente, ma una bicicletta.

Non c'è bisogno di raffinare, sono analoghi completi di wtoi/atoi. La questione è chiusa.
 

Errore di compilazione

#include <Math\Stat\Math.mqh>
struct S {};
 
Salve, potreste dirmi se è possibile impostare un "separatore di periodo" in Metatrader? Voglio solo essere in grado di vedere dove finiscono le candele da 15, 30 e ore su m5 in modo da non dover sempre guardare l'ora, come posso fare?