Hatalar, hatalar, sorular - sayfa 2470

 
Igor Zakharov :

Yani saniyeler içinde değil...

Ve bu konuda dilin betimlenmesinde her şeyden önce bildirmek gerekir.

Ve aramanız gereken makalelerde değil. Forum aranacak en son şey olmalı.

Yoksa şöyle oluyor: Kitaba bakıyorum ama bir incir görüyorum...

 

Bu neden olabilir?

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

Bugün enstrümanın spesifikasyonunda minimum sesin 100 olduğunu ve adımın da 100 olduğunu keşfettim. Ancak bu tür hacimlerde manuel olarak " Yanlış ses " hatasıyla pozisyon açmaz ve 0.01 ayarlarsanız, düğmeler açılır. aktif değil.

Sürümü "daha genç" olarak değiştirdi

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

değişiklik yok.

Sonra onu yayın sürümüyle değiştirdim

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

Ve işte sonuç



Bu neden sadece bir şirkette oluyor? Sonuçta, evrensel olsaydı, sorun uzun zaman önce gündeme getirilip çözülürdü.

O firmaya hangi yönde teknik destek göndermeliyim?


Eklendi: Yapı 2025'in aynı şirketin yüzde hesabında iyi çalışması çok garip. Tüm takım parametreleri olması gerektiği gibidir.

Cent ticareti. Kendim tahmin ettim ... ama daha fazlasını istiyorum.

 
Ilyas :

Mesaj için teşekkürler.
Bu bir ilkel, düzelteceğiz.

@Ilyas , NonPOD yapısının da benzer bir sorunu var.

 struct NonPod{
   uchar data[];
};   
   
void OnStart (){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
Sınıflar için ad alanı desteğine sahip yeni bir yapı beklemek dışında, bu sınırlamayı nasıl aşacağını bilen var mı:
 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 işlevi içinde genel ad bildirimi kapsamında sorun

 
MT5 (yapı 2057)

Bir typedef içinde aynı işlev imzasını yeniden kullanırken hata derleyin :
 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 (yapı 2057)

Bir typedef içinde aynı imzanın yeniden kullanımına ilişkin bir "yasaklama" ile ilgili bir hata:

Ve 2 yıldan daha uzun bir süre önce temelde benzer olan ve 2056x32'de sonuç veren bir betiğim var: EX5 yüklemesi başarısız oldu

 
Sergey Dzyublik :
Sınıflar için ad alanı desteğine sahip yeni bir yapı beklemek dışında, bu sınırlamayı nasıl aşacağını bilen var mı:

derlemek

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

mümkün (ve hatta işe yarayacak), ama bundan daha fazlası değil: ayrıca, diyelim ki yazmak mümkün olmayacak

   int_value.eq = f;
}

bu yüzden yazmıyorum

 
A100 :

Derleyin, böylece yazmayın

Hayır hayır, yine de zor ama işe yarıyor...
Orada typedef örneğinde bool tipi biraz kayboldu.

 #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 düzeltmeleri ve varsa ad alanı güncellemeleri çıkana kadar,
bir sınıf nesnesi oluşturmak için her türün kullanımını makrolar aracılığıyla ayrı ayrı bildirmeniz ve ardından yine makrolar aracılığıyla oluşturulan sınıfların adını almanız gerekir ...
 

CChartObjectLabel oluştururken göstergedeki nesnelerin neden başlatmadan kaldırma sırasında silinmediğini aşağıdaki kodda açıklayın:

 //+------------------------------------------------------------------+
//|                                                         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'yi değiştirirken bir günlük girişi alıyorum: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: CChartObjectLabel türünde 2 nesne kaldı

OnInit()'te metin etiketlerinin ( CChartObjectLabel ) oluşturulmasını iptal ederseniz, her şey doğru şekilde çalışacaktır.

CreateLabel() işlevine bir işaretçi iletiyorum ve sonra bir nedenden dolayı onu OnDeinit() içinde silmek mümkün değil