Hatalar, hatalar, sorular - sayfa 1729

 
fxsaber :

OBJ_CHART oluşturuyorum ve fare ile grafiğin sol üst köşesinden sürükleyip bırakıyorum. Sürüklerken , başarılı bir sonuçla ObjectDelete çağrılır . MT5.

Daha. OBJ_CHART'ı sürüklerken CHART özelliklerini değiştirirseniz (örneğin, ChartNavigate), ilgili görselleştirme gerçekleşmez.
 
Bu konu ile ilgili olmayan yorumlar " Her bir alt pencerenin hangi göstergeye ait olduğu nasıl belirlenir " bölümüne taşınmıştır.
 
A100 :

Derleme sırasında hata:

Yapı 1447'de tanıtıldı
Mesajınız için teşekkürler, geçirilen parametrenin sabitliği üzerindeki kontrol düzeltildi.

Şimdi her iki durumda da bir derleme hatası olacak, hatayı önlemek için kod değiştirilmelidir:
 template < typename T>
void f1( const T* const & a[] ) {}    << добавлена константность ссылки
class A {};
void f2( const A* const & a[] ) {}    << добавлена константность ссылки
class B {
         void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
         void g2() const { f2( a ); } //нормально
        A *a[];
};
 
константность ссылки

Bunu hiçbir yerde görmedim. Bu standart mı?

 
Ilyas :
Şimdi her iki durumda da bir derleme hatası olacak, hatayı önlemek için kod değiştirilmelidir:

Lütfen bu çelişkiyi de kontrol edin (burada, tam tersine - hata aşağıdadır)

 template < typename T>
void f1( const T& a[] ) {}
class A {};
void f2( const A& a[] ) {}
class B {
         void g1() const { f1( a ); } //нормально
         void g2() const { f2( a ); } //error: 'a' - parameter conversion not allowed
        A *a[];
};
 

MQL5'te bellek nasıl çalışır?

Örneğin, bu kod var:

 class Alfa {}
class Beta
  {
private :
   Alfa  *ptr_a;
   Alfa   obj_a;
public :
   Beta( void ) { ptr_a = new Alfa(); }
  ~Beta( void ) { delete ptr_a; }
   Metod( void ) {...}
  }
//---

int OnInit ( void ) {
   Beta *ptr_obj = new Beta();
   Beta obj;
//---
   return INIT_SUCCEEDED ;
}
void OnDeinit ( const int reason) {
   delete ptr_obj;
}

ptr_obj nesnesi için "yığın" içindeki hangi belleğin ayrılacağına göre ve obj nesnesi için otomatik bellek ayrılacaktır. Ve MQL5 bellek yöneticisinin çalışması bu nesneler için açıksa:

1. ptr_obj nesnesinin ptr_a nesnesi altında, bellek "yığın" içinde tahsis edilir.

2. obj nesnesinin obj_a nesnesi altında, bellek otomatik olarak tahsis edilir.

Bu durumlarda MQL5 bellek yöneticisinin çalışması nasıl düzenlenir:

3. ptr_obj nesnesinin obj_a nesnesi hangi bellek alanında bulunacak?

4. Obj nesnesinin ptr_a nesnesi hangi bellek alanında bulunacak?

 
A100 :

Lütfen bu çelişkiyi de kontrol edin (burada tam tersi)

Bu doğru, burada yazarken, T = A *
 
void f( const A* &Array[] );

Böyle bir aktarımla, dizideki (ve boyuttaki) öğeleri değiştirmek mümkündür, ancak öğelerin kendilerini değiştiremezsiniz. Doğru?

 void f( const A* const &Array[] );

Ve burada elemanlar (ve boyut) yerlerde değiştirilemez. Doğru şekilde?

 
fxsaber :

Bunu hiçbir yerde görmedim. Bu standart mı?

Yazmamak için yazdım: sabit nesnelere sabit bir işaretçi dizisine bir bağlantı olmalı
 
fxsaber :

Böyle bir aktarımla, dizideki (ve boyuttaki) öğeleri değiştirmek mümkündür, ancak öğelerin kendilerini değiştiremezsiniz. Doğru?

Ve burada elemanlar (ve boyut) yerlerde değiştirilemez. Doğru şekilde?

Evet bu doğru.