Errores, fallos, preguntas - página 1967

 
Комбинатор:
Está bien si consigues que se compile y se ejecute en los profesionales )

Realmente no entiendo qué tiene de malo. Todo funciona.

template<typename T>
void f() { }

template<>
void f<int>() { }

int _tmain(int argc, _TCHAR* argv[])
{
  f<double>();
  f<int>();

  return 0;
}
 
Alexey Navoykov:

Realmente no entiendo qué tiene de malo. Todo funciona.

Vale, el estúpido soy yo.
 

Sí, es algo que ya he descubierto. Pero el problema es (era) que en el código fuente este memeber es en realidad un array, y decidí tratar con el escalar primero por simplicidad. Sin embargo, para la matriz el mismo truco no funciona. Tuve que arrastrar el array estáticamente dentro de la función miembro.

 
Stanislav Korotky:

Sin embargo, el mismo truco no funciona para un array. Tuve que arrastrar el array estáticamente dentro de la función miembro.

Esto ya es un error del compilador - debemos decirle a Service Desk

template<typename T>
struct A {
        static int i[];
};
template<typename T>
int A::i[]; //error: '[' - unexpected token
 

construye 1650. Si se enlazan varios módulos .ex5 (main y library) no funciona nada. En todas partes hay un error de la forma:

2017.08.18 01:49:59.759 Draw (USDJPY,H1) No se puede encontrar 'xxx' en 'yyyy.ex5'

Antes todo funcionaba bien. Incluso ahora, al compilar MetaEditor 1646 + MetaTrader 1650, todo funciona

Obviamente hay un error en el MetaEditor 1650, mientras que los archivos .ex5 son casi el doble de finos. ¿Por qué estos experimentos?

 

Añadir código

//Test.mqh
class A {};
class B { public:
        B() { f(); }
        A *g() { return NULL; }
void f()
{
        void *x = g();
        if ( true )
                return; 
        delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
                   //а ошибка при выполнении возникает именно из-за наличия этой строки
                   //и указатель в исходном коде действительный (есть проверка)
}
};

//Test.mq5
#include "Test.mqh"
#import "Test2.ex5"
        A *f();
#import
void OnStart()
{
        f();
}
//Test2.mq5
#property library
#include "Test.mqh"
static B b;
A *f() export { return NULL; }

El resultado está en el post anterior

 
Otro ejemplo a comprobar
//Test.mq5
class A;
#import "Test2.ex5"
        A *f();
        void g( A* );
#import
void OnStart() //вариант 1
{
        f(); /*возвращаемое значение не используется*/
}
//Test2.mq5
#property library
class A {};
static A *a;
A *f()       export { /*делает что-то полезное*/; return a; }

void g( A* ) export { /*делает что-то полезное*/; }

La biblioteca es de carácter general. Por cierto, el puntero f() devuelto no se utiliza en este caso - opción 1 (pero puede utilizarse - véase la opción 2 más abajo). Al compilar Test.mq5 no hay mensajes de error - significa que el compilador no necesita definir la clase (A). Sin embargo, hay un error durante la ejecución: No se puede encontrar 'f' en 'Test2.ex5'.

Más adelante

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
¿Puede decirme si es posible establecer la reducción relativa en lugar de la reducción máxima en los resultados de la prueba? Pero a menudo la reducción máxima es del 3-5% y la reducción relativa alcanza el 50%. Y para ver la reducción relativa debería probarse por separado. Gracias de antemano
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

Hay que cambiar el lenguaje de Windows para ser feliz...