오류, 버그, 질문 - 페이지 710

 

변수 array 의 크기 를 결정해야 했지만 오류가 발생했습니다.

 void OnStart ()
  {
   int j= 1000 ;
//---
   double arrBalancesTS[][j];
  }

//---

//---

상수(#define) 및 숫자 값과 직접 작동하지만 작동하지 않습니다. 왜요?

 
tol64 :

변수 배열의 크기를 결정해야 했지만 오류가 발생했습니다.

//---

//---

상수(#define) 및 숫자 값과 직접 작동하지만 작동하지 않습니다. 왜요?

상수 포함 - 정적 배열 및 변수 포함 - 동적. 그리고 동적 크기는 ArrayResize를 사용하여 결정됩니다.
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 

tol64 :

왜요?

두 번째 및 후속 차원의 크기는 고정되어 있습니다. 상수로만 설정할 수 있습니다.
 
tol64 :

상수(#define) 및 숫자 값과 직접 작동하지만 작동하지 않습니다. 왜요?

#define 을 통해 정의할 때 컴파일러는 단순히 발생한 매크로를 컴파일 전에 필요한 항목으로 대체하기 때문입니다. 그러므로 그는 본다

 void OnStart ()
  {
//---
   double arrBalancesTS[][ 1000 ];
  }

MQL5 언어와 모순되지 않습니다.

 
Yedelkin :

확인. 그럼 제가 가겠습니다. 그래서 Print() 함수 설명에 " Double type 데이터는 dot 뒤에 소수점 이하 16자리의 정확도로 출력된다."라고 되어 있다. 실제로 Print() 함수는 다소 반올림된 데이터를 출력하는 것으로 나타났습니다.

ND 0 Victorg2 (EURUSD,M1) 11:04:42 인쇄(b)= 200.0
MP 0 Victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199.999999999999716

사실 실수 는 17자리 이하의 유효 숫자로 메모리에 저장됩니다.

차이점을 느끼려면 다음 예를 시도하십시오.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double a,b;

   a= 7.0 / 200.0 ;
   b= 7.0 /a;
   Print ( "Print(b)=" ,b);
   Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));

   Print ( "Print(StringFormat(b,%.15G))=" , StringFormat ( "%.15G" ,b));
   Print ( "Print(StringFormat(b,%.16G))=" , StringFormat ( "%.16G" ,b));
   Print ( "Print(StringFormat(b,%.17G))=" , StringFormat ( "%.17G" ,b));
   Print ( "Print(StringFormat(b,%.18G))=" , StringFormat ( "%.18G" ,b));
   
//19999999999999997
   Print ( "Print(StringFormat(b,%.15f))=" , StringFormat ( "%.15f" ,b));
   Print ( "Print(StringFormat(b,%.16f))=" , StringFormat ( "%.16f" ,b));
   Print ( "Print(StringFormat(b,%.17f))=" , StringFormat ( "%.17f" ,b));
   
  }
//+------------------------------------------------------------------+
설명서의 설명이 수정됩니다.
 
notused :
상수 포함 - 정적 배열 및 변수 포함 - 동적. 그리고 동적 크기는 ArrayResize를 사용하여 결정됩니다.
더엑스퍼트 :
두 번째 및 후속 차원의 크기는 고정되어 있습니다. 상수로만 설정할 수 있습니다.
로쉬 :

#define 을 통해 정의할 때 컴파일러는 단순히 발생한 매크로를 컴파일 전에 필요한 항목으로 대체하기 때문입니다. 그러므로 그는 본다

MQL5 언어와 모순되지 않습니다.

고맙습니다. 첫 번째 차원과 두 번째 차원의 배열 크기가 계산 중에 결정되고 상수가 될 수 없는 경우 어떻게 해야 합니까? ArrayResize ()를 사용하면 첫 번째 차원의 크기만 조정할 수 있습니다. 그리고 왜 변수 값을 사용하여 배열의 크기를 변경할 수 있지만 초기에는 설정할 수 없습니까?
 
tol64 :
고맙습니다. 첫 번째 차원과 두 번째 차원의 배열 크기가 계산 중에 결정되고 상수가 될 수 없는 경우 어떻게 해야 합니까? ArrayResize ()를 사용하면 첫 번째 차원의 크기만 조정할 수 있습니다. 그리고 왜 변수 값을 사용하여 배열의 크기를 변경할 수 있지만 초기에는 설정할 수 없습니까?
수업을 사용합니다.
 
tol64 :
고맙습니다. 첫 번째 차원과 두 번째 차원의 배열 크기가 계산 중에 결정되고 상수가 될 수 없는 경우 어떻게 해야 합니까? ArrayResize ()를 사용하면 첫 번째 차원의 크기만 조정할 수 있습니다. 그리고 왜 변수 값을 사용하여 배열의 크기를 변경할 수 있지만 초기에는 설정할 수 없습니까?
CMatrix 클래스에 대한 예제는 Overloading Operations 섹션을 참조하십시오. 아마도 이것이 귀하에게 적합할 것입니다.
 
안녕하세요.

2 클래스가 메시지를 교환하도록 강제하는 방법을 찾을 수 없습니다.

나는 클래스 A에 B에 대한 링크가 있고 B에 A에 대한 링크가 있기를 원했습니다.
컴파일 오류가 있습니다. 아마도 이것은 MQL5에서 허용되지 않습니다. 그러나 이것이 없으면 객체 프로그래밍이 30% 사용됩니다.

해결책은 아마도 모든 것을 알고 모든 것을 할 수 있는 하나의 큰 GOD 클래스를 작성하는 것입니다. 그러나 그것은 나에게 그다지 우아하게 보이지 않습니다.
누가 해결책을 도와줄 수 있습니까?

미리 감사드립니다!