Errori, bug, domande - pagina 1967

 
Комбинатор:
Va bene se riuscite a compilarlo ed eseguirlo nei professionisti)

Non capisco davvero cosa non vi piaccia. Tutto funziona.

template<typename T>
void f() { }

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

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

  return 0;
}
 
Alexey Navoykov:

Non capisco davvero cosa ci sia di sbagliato. Tutto funziona.

Ok, sono io lo stupido.
 

Sì, è qualcosa che ho già scoperto. Ma il problema è (era) che nel sorgente questo memeber è in realtà un array, e ho deciso di trattare prima lo scalare per semplicità. Tuttavia, per l'array lo stesso trucco non funziona. Ho dovuto trascinare l'array staticamente all'interno della funzione membro.

 
Stanislav Korotky:

Tuttavia, lo stesso trucco non funziona per un array. Ho dovuto trascinare l'array staticamente all'interno della funzione membro.

Questo è già un errore del compilatore - dovremmo dire a Service Desk

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

costruire 1650. Se diversi moduli .ex5 correlati (main e library), non funziona proprio nulla. Ovunque c'è un errore della forma:

2017.08.18 01:49:59.759 Draw (USDJPY,H1) Impossibile trovare 'xxx' in 'yyyy.ex5'

Prima tutto funzionava bene. Anche ora, quando si compila MetaEditor 1646 + MetaTrader 1650, tutto funziona

Ovviamente c'è un errore in MetaEditor 1650, mentre i file .ex5 sono quasi il doppio più sottili. Perché questi esperimenti?

 

Aggiungere il codice

//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; }

Il risultato è nel post precedente

 
Un altro esempio da controllare
//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 è di natura generale. A proposito, il puntatore f() restituito non è usato in questo caso - opzione 1 (ma può essere usato - vedi opzione 2 sotto). Quando si compila Test.mq5 non ci sono messaggi di errore - significa che il compilatore non ha bisogno di definire la classe (A). Tuttavia, c'è un errore durante l'esecuzione: Cannot find 'f' in 'Test2.ex5'.

Più avanti

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
Potete dirmi se è possibile impostare il drawdown relativo invece del drawdown massimo nei risultati del test? Ma spesso il drawdown massimo è del 3-5% e il drawdown relativo raggiunge il 50%. E per vedere il drawdown relativo dovrebbe essere testato separatamente. Grazie in anticipo
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

Il linguaggio di Windows deve essere cambiato per essere felice...