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

 
Igor Zakharov :

그래서 몇초만에 되는게 아니라...

그리고 언어에 대한 설명에서 그것에 대해 무엇보다도 먼저보고해야합니다.

그리고 당신이 찾아야 할 기사에는 없습니다. 포럼은 마지막으로 찾아야 할 곳이어야 합니다.

그렇지 않으면 다음과 같이 나타납니다. 나는 책을 보지만 무화과를 봅니다 ...

 

왜 그럴 수 있습니까?

IM       0        17 : 19 : 04.403     Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG       0        17 : 19 : 04.403     Terminal        Windows 7 Service Pack 1 (build 7601 ) x64, IE 11 , AMD FX- 4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+ 3

오늘 나는 기기 사양에서 최소 볼륨이 100이고 단계도 100이라는 것을 발견했습니다. 그러나 이러한 볼륨을 사용하면 수동으로 위치를 열지 않고 " 잘못된 볼륨 " 오류가 발생하며 0.01을 설정하면 버튼이 활성화되지 않은.

버전을 "어린"으로 변경

KK       0        17 : 35 : 14.046     Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE       0        17 : 35 : 14.046     Terminal        Windows 7 Service Pack 1 (build 7601 ) x64, IE 11 , AMD FX- 4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+ 3

변경 사항 없음.

그런 다음 릴리스 버전으로 교체했습니다.

FI       0        17 : 37 : 23.049     Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS       0        17 : 37 : 23.049     Terminal        Windows 7 Service Pack 1 (build 7601 ) x64, IE 11 , AMD FX- 4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+ 3

그리고 여기 결과가 있습니다



왜 한 회사에서만 이런 일이 발생합니까? 결국 그것이 보편적이라면 문제는 오래전에 제기되고 해결되었을 것입니다.

해당 회사에 기술 지원을 어떤 방향으로 보내야 합니까?


추가됨: 그리고 빌드 2025가 같은 회사의 센트 계정에서 제대로 작동하는 것이 매우 이상합니다. 모든 도구 매개변수는 원래대로입니다.

센트로 거래하세요. 나는 그것을 스스로 추측했지만 ... 더 원합니다.

 
Ilyas :

메시지 주셔서 감사합니다.
이것은 기초입니다. 수정하십시오.

@Ilyas , NonPOD 구조체에도 비슷한 문제가 있습니다.

 struct NonPod{
   uchar data[];
};   
   
void OnStart (){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
클래스에 대한 네임스페이스 지원이 포함된 새 빌드를 기다리는 것 외에 이 제한을 해결하는 방법을 아는 사람이 있습니까?
 template < typename T>
class TestTypedef{
public :
   typedef void (* callback)(T &);     // 'callback' - identifier already used
   callback eq;
};


void ff( int &) { Print ( __FUNCSIG__ );}

void OnStart (){  

   TestTypedef< int > int_value;
   int_value.eq = ff;
   
   int x = 5 ;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

typedef 기능 내 전역 이름 선언 범위의 문제

 
MT5(빌드 2057)

typedef 내에서 동일한 함수 서명을 재사용할 때 컴파일 오류 :
 typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart (){
   callback func_ptr = test_func;   //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik :
MT5(빌드 2057)

typedef 내에서 동일한 서명의 재사용에 대한 "금지"가 있는 버그:

그리고 2년 전에 본질적으로 유사한 스크립트 가 있으며 2056x32: EX5 로딩에 실패했습니다.

 
Sergey Dzyublik :
클래스에 대한 네임스페이스 지원이 포함된 새 빌드를 기다리는 것 외에 이 제한을 해결하는 방법을 아는 사람이 있습니까?

엮다

 void f( int &) {}
void OnStart ()
{
   TestTypedef< int > int_value;
   TestTypedef< string > string_value;

그것은 가능하지만 (심지어 작동할 것입니다) 그 이상은 아닙니다.

   int_value.eq = f;
}

그래서 나는 쓰지 않는다

 
A100 :

다음과 같이 쓰지 않도록 컴파일하십시오.

아니 아니, 여전히 어렵지만 작동합니다 ...
typedef의 예에서 bool 유형 이 약간 손실되었습니다.

 #define PRINT(x) ; Print(#x, ":", string(x))

#define CREATE_TestTypedef(type)                              \
class TestTypedef_ ##type{                                     \
public :                                                       \
   typedef bool (* callback_ ##type)(type &);                  \
   callback_ ##type eq;                                        \
}
   
bool f( int &) { return true ;}


void OnStart (){
   CREATE_TestTypedef( int ) int_value;
   CREATE_TestTypedef( string ) string_value;                     
   
   int data = 5 ;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
typedef 수정 및 네임스페이스 업데이트가 있는 경우 나올 때까지,
매크로를 통해 각 유형의 용도를 별도로 선언하고 다시 매크로를 통해 클래스 개체 를 생성하기 위해 이미 생성된 클래스의 이름을 가져와야 합니다...
 

CChartObjectLabel 을 생성할 때 다음 코드에서 초기화 해제 중에 표시기의 개체가 삭제되지 않는 이유를 설명합니다.

 //+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   CreateLabel(LabelUP, "LabelUP" , 0 );
   CreateLabel(LabelDN, "LabelDN" , 30 );
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   return (rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l, string name, int y)
  {
   l= new CChartObjectLabel;
   l.Create( 0 ,name, ChartWindowFind (), 0 ,y);
   l.Color( clrYellow );
   l.FontSize( 14 );
   l.Description(name);
  }
//+------------------------------------------------------------------+

TF를 전환할 때 로그 항목이 표시됩니다. 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: CChartObjectLabel 유형의 객체 2개 남음

OnInit()에서 텍스트 레이블 생성( CCartObjectLabel )의 주석을 제거하면 모든 것이 올바르게 작동합니다.

CreateLabel() 함수에 대한 포인터를 전달한 다음 어떤 이유로 OnDeinit()에서 삭제할 수 없습니다.