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.
//Test.mqhclass A {};
class B { public:
B() { f(); }
A *g() { returnNULL; }
void f()
{
void *x = g();
if ( true )
return;
delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
//а ошибка при выполнении возникает именно из-за наличия этой строки
//и указатель в исходном коде действительный (есть проверка)
}
};
//Test.mq5#include "Test.mqh"#import "Test2.ex5"
A *f();
#import
voidOnStart()
{
f();
}
//Test2.mq5#property library#include "Test.mqh"static B b;
A *f() export { returnNULL; }
//Test.mq5class A;
#import "Test2.ex5"
A *f();
void g( A* );
#import
voidOnStart() //вариант 1
{
f(); /*возвращаемое значение не используется*/
}
//Test2.mq5#property libraryclass 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
voidOnStart() //вариант 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
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.
Não compreendo bem o que não lhe agrada. Tudo funciona.
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
A100, 2017.08.17 18:45
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.
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
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
O resultado está no post anterior
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
A linguagem Windows precisa de ser alterada para ser feliz...