//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.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 { /*делает что-то полезное*/; }
도서관은 일반적입니다. 전달할 때, 이 특별한 경우에 f()에 의해 반환된 포인터는 더 이상 사용되지 않습니다 - 옵션 1(하지만 사용할 수 있음 - 아래 옵션 2 참조). Test.mq5를 컴파일할 때 오류 메시지 가 표시되지 않습니다. 즉, 컴파일러에서 클래스(A)를 정의할 필요가 없습니다. 그러나 실행할 때 오류는 'Test2.ex5'에서 'f'를 찾을 수 없습니다.
더 나아가
voidOnStart () //вариант 2
{
g( f()/*возвращаемое значение используется*/);
}
프로에서 컴파일하고 실행하면 괜찮아)
나는 당신이 여기에서 무엇을 좋아하지 않는지 이해하지 못합니다. 모든 것이 작동합니다.
나는 당신이 여기에서 무엇을 좋아하지 않는지 이해하지 못합니다. 모든 것이 작동합니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
A100 , 2017.08.17 18:45
예, 저는 이미 이것을 발견했습니다. 그러나 문제는 소스에서 이 멤버가 실제로 배열이고 단순성을 위해 먼저 스칼라를 다루기로 결정했다는 것입니다. 그러나 어레이의 경우 유사한 기술이 작동하지 않습니다. 멤버 함수 내에서 정적으로 배열을 끌어야 했습니다.
그러나 어레이의 경우 유사한 기술이 작동하지 않습니다. 멤버 함수 내부에 static이 있는 배열을 끌어야 했습니다.
이것은 이미 컴파일러 오류입니다. 서비스 데스크에 보고해야 합니다.
빌드 1650. 관련된 .ex5 모듈(메인 및 라이브러리)이 여러 개 있으면 아무 것도 작동 하지 않습니다. 모든 곳에서 형식 오류:
2017.08.18 01:49:59.759 추첨 (USDJPY,H1) 'yyy.ex5'에서 'xxx'를 찾을 수 없습니다
이전에는 모든 것이 잘 작동했습니다. 지금도 MetaEditor 1646 + MetaTrader 1650을 컴파일하면 모든 것이 작동합니다.
분명히 MetaEditor 1650의 버그이지만 .ex5 파일의 크기는 거의 절반으로 줄었습니다. 왜 그런 실험을 합니까?
나는 코드를 추가
결과는 이전 포스트에 있습니다.
도서관은 일반적입니다. 전달할 때, 이 특별한 경우에 f()에 의해 반환된 포인터는 더 이상 사용되지 않습니다 - 옵션 1(하지만 사용할 수 있음 - 아래 옵션 2 참조). Test.mq5를 컴파일할 때 오류 메시지 가 표시되지 않습니다. 즉, 컴파일러에서 클래스(A)를 정의할 필요가 없습니다. 그러나 실행할 때 오류는 'Test2.ex5'에서 'f'를 찾을 수 없습니다.
더 나아가
윈도우 언어를 바꿔야 행복하다...