Errores, fallos, preguntas - página 1768

 
fxsaber:
Esto sólo es posible en un compilador tonto. Tú mismo lo sabes.
El compilador de C++ no lo pensará por ti.
#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;
}
La salida:
___Ejemplo de concatenación literal___
operador literal
___operador+ ejemplo___
operador literal
operador literal

operador +

Como puede ver, el operador+ no ha sido sustituido por la concatenación en el segundo caso (creado para literales con posterior adición en tiempo de ejecución). El compilador simplemente no puede recortarlo porque el programador tiene demasiadas posibilidades, lo que limita enormemente el alcance de la optimización. Esto no es MKL, por supuesto, puede ser diferente, pero la propia afirmación: "un compilador normal lo hará todo por mí" es errónea.
 
pavlick_:
Esto no es MQL, por supuesto, puede ser diferente, pero la afirmación "un compilador normal lo hará todo por mí" es errónea.
Bueno, ya que no hay tales operadores en MQL, entonces es lógico no tener ninguna característica asociada a ellos. No voy a discutir sobre los compiladores, porque no soy programador en absoluto. Sólo conozco un poco de MQL.
 

Cansado de perder tiempo y dinero: el optimizador se queda colgado en la última pasada. Los agentes no hacen nada, todo está en la fase autorizada. Hay silencio en la bitácora. No tiene sentido habilitar/deshabilitar agentes, todo empieza de cero después de reiniciar la optimización.

¿Quién se ha enfrentado a este problema? ¿Cómo combatirlo?

Archivos adjuntos:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

Línea mágica

Secuencia de operaciones en MetaEditor\1495 a una resolución de pantalla de 1024x768 :

  • Abrir el archivo adjunto
  • Mueva el control deslizante horizontal hacia la derecha (como en la imagen)
  • En la 3ª línea haga clic en /*12345*/
Otros ajustes: Servicio/Configuración/General/Tabulación 4 caracteres
Archivos adjuntos:
Test.mq5  2 kb
 

Al intentar convertir una cadena en un número mediante StringToInteger(), si la cadena no contiene un número, devuelve 0 sin error (GetLastError() = 0). Si los parámetros de entrada contienen una cadena y el usuario ha especificado los valores incorrectamente, la función devolverá un valor incorrecto y no se mostrará ningún error. Esto es malo.

Además, si la cadena contiene una representación numérica incorrecta, por ejemplo, 5o (en lugar de 50), la función devolverá el valor 5 sin generar un error. No sólo que no es 0, sino que la función rompe la cadena como 5, lo que de nuevo es incorrecto.

Por favor, queridos desarrolladores, mejoren la función añadiendo códigos de error o, si no puede analizar la cadena, devuelvan el valor LONG_MAX + el error para que podamos determinar lo que está mal. No puedes hacerlo ahora.

Comprobación del código del 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());
  }
//+------------------------------------------------------------------+
 

Implementa tu propia versión de la función - no debería llevar más de 10 minutos.

No cambiaremos el comportamiento de las funciones del sistema.

 
Renat Fatkhullin:

Implementa tu propia versión de la función - no debería llevar más de 10 minutos.

No cambiaremos el comportamiento de las funciones del sistema.

Entonces, ¿no cree que es necesario refinar las funciones, especialmente las que pueden mentir de forma evidente?

Incluso si sólo añadiéramos códigos de error, estaría bien, pero ahora estás sugiriendo que reinventemos la rueda. No es complicado, por supuesto, pero sí una bicicleta.

 
Alexey Kozitsyn:

¿Así que no crees que sea necesario refinar las funciones, especialmente las que obviamente pueden mentir?

Incluso si sólo se añadieran los códigos de error, estaría bien, pero ahora se está proponiendo reinventar la rueda. No es complicado, por supuesto, pero sí una bicicleta.

No es necesario refinar, son análogos completos de wtoi/atoi. La pregunta está cerrada.
 

Error de compilación

#include <Math\Stat\Math.mqh>
struct S {};
 
Hola, ¿podríais decirme si es posible establecer un "separador de periodos" en Metatrader? Sólo quiero poder ver dónde terminan las velas de 15, 30 y horas en m5, para no tener que mirar siempre la hora, ¿cómo puedo hacerlo?