Erros, bugs, perguntas - página 1967

 
Комбинатор:
Não há problema se o conseguir compilar e executar nos profissionais )

Não compreendo bem o que há de errado com isto. Tudo funciona.

template<typename T>
void f() { }

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

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

  return 0;
}
 
Alexey Navoykov:

Não compreendo bem o que não lhe agrada. Tudo funciona.

Está bem, eu é que sou o estúpido.
 

Sim, isso é algo que eu já descobri. Mas o problema é (foi) que na fonte este memeber é na realidade uma matriz, e decidi lidar com o escalar primeiro por simplicidade. No entanto, para a matriz, o mesmo truque não funciona. Tive de arrastar a matriz estaticamente dentro da função de membro.

 
Stanislav Korotky:

No entanto, o mesmo truque não funciona para uma matriz. Tive de arrastar a matriz estaticamente dentro da função de membro.

Isto já é um erro de compilação - devemos dizer ao Service Desk

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

construir 1650. Se vários módulos .ex5 relacionados (principal e biblioteca), nada funciona. Em todo o lado há um erro na forma:

2017.08.18 01:49:59.759 Sorteio (USDJPY,H1) Não encontro 'xxx' em 'yyyy.ex5'.

Tudo estava a funcionar bem antes. Mesmo agora, ao compilar o MetaEditor 1646 + MetaTrader 1650, tudo funciona

Obviamente há um erro no MetaEditor 1650, enquanto os ficheiros .ex5 são quase duas vezes mais finos. Porquê tais experiências?

 

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

O resultado está no post anterior

 
Outro exemplo a verificar
//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 { /*делает что-то полезное*/; }

A biblioteca é de natureza geral. A propósito, o ponteiro f() devolvido não é utilizado neste caso - opção 1 (mas pode ser utilizado - ver opção 2 abaixo). Ao compilar Test.mq5 não há mensagens de erro - significa que o compilador não precisa de definir a classe (A). No entanto, há um erro durante a execução: não é possível encontrar 'f' em 'Test2.ex5'.

Mais adiante

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
Pode dizer-me se é possível definir o levantamento de fundos relativo em vez do levantamento máximo nos resultados do teste? Mas muitas vezes, o máximo de levantamento de crédito é de 3-5% e o levantamento relativo atinge 50%. E para ver o levantamento relativo deve ser testado separadamente. Obrigado de antemão
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

A linguagem Windows precisa de ser alterada para ser feliz...

Razão: