Errores, fallos, preguntas - página 1331

 

Como esto - realmente habría una ambigüedad

void f( uint )  { Print( __FUNCSIG__ ); }
void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // неопределенность 
}

lo cual es extrañamente superado por el compilador si se reescribe el ejemplo de manera diferente

#import "Test.ex5"
        void f( uint );
#import
        void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // вызывается f(int), а должна генерироваться неопределенность
}
 
Su verdad
 
No sé si esto se ha mencionado antes. En el MetaEditor, si el nombre de la variable de entrada coincide con el nombre de la variable local (o el nombre del campo de la clase), este último se resalta en rojo en todas partes, al igual que la variable de entrada. Esto causa confusión al leer el código. Deberíamos arreglar esto.
 
Alexey Navoykov:
No sé si se ha dicho antes o no. En el MetaEditor si el nombre de la variable de entrada coincide con el nombre de la variable local (o el nombre del campo de la clase) esta última se marca en rojo en todas partes, así como la variable de entrada. Esto causa confusión al leer el código. Deberíamos arreglar esto.

dar nombres idénticos a entidades de código es un intento de dispararse en el pie :)

Es más fácil cambiar el nombre de una variable de entrada y no tendrás problemas ni confusiones...

 

MT4/845, Windows7/64 bit. Pregunta sobre el texto a una nueva línea con \n. Hice un guión:

#property strict

string t1="Text_1";
string t2="Text_2";

void OnStart()
  {
   Print(t1+"\n "+t2);
   Print("Text_3"+"\n Text_4");
  }

Resultado:


Esperaba que los valores de Texto_2 y Texto_4 estuvieran en otras líneas. Por favor, indíqueme qué es lo que está mal.

 
Konstantin Karpov:

dar nombres idénticos a entidades de código es un intento de dispararse en el pie :)

Es más fácil cambiar el nombre de una variable de entrada y no tendrás problemas ni confusiones...

Tu consejo no tiene sentido en la práctica. Nadie pone nombres idénticos a propósito. El código de la función local vive su propia vida, mientras que el programa externo vive su propia vida. Y los nombres de las variables externas pueden cambiar con el tiempo y se pueden añadir nuevas variables externas.Y si después, de repente, una de las cientos de funciones tieneuna variable local con el mismo nombre, ¿qué crees que debemos cambiar el nombre de la variable global? No hay que buscar excusas para los errores de los desarrolladores.
 

MT4/845, Windows7/64 bit. Guión:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("A: d3 = ",DoubleToString(d3));
   Print("B: d3 = ",DoubleToStr(d3));
   Print("C: d3 = ",DoubleToString(d3,16));
   Print("D: d3 = ",DoubleToString(d3,8));
   Print("E: d3 = ",DoubleToString(NormalizeDouble(d3,8)));
   Print("F: d3 = ",DoubleToString(NormalizeDouble(d3,7)));
   Print("G: d3 = ",DoubleToString(NormalizeDouble(d3,8),7));
   Print("H: d3 = ",DoubleToString(NormalizeDouble(d3,8),8));
  }
//+------------------------------------------------------------------+

Resultado:


¿Alguien sabe cómo imprimir el número 0,55001234?

 
Maxim Khrolenko:

MT4/845, Windows7/64 bit. Guión:

Resultado:


¿Alguien sabe cómo imprimir el número 0,55001234?

 Print("C: d3 = ",DoubleToString(d3,8));

 
Maxim Khrolenko:

MT4/845, Windows7/64 bit. Pregunta sobre el texto a una nueva línea con \n. Hice un guión:

Aparentemente un error en MT4 (en MT5 todo está bien)
 
A100:
Al parecer, un error en MT4 (MT5 está bien)
Ya veo, espero que los desarrolladores presten atención a esto.