Hatalar, hatalar, sorular - sayfa 2328

 
Alexey Navoykov :
dikkatsizsin

Siz veya. direk konuya girelim

 
A100 :

Yarın uygulanabilecek (10 yıl içinde değil) ve C++ ile harici bir benzerliği olacak en basit seçeneği önerdim (aksi halde neden herhangi bir şeyi değiştirelim). Ayrıca, operatör*() yapılmadıysa ve yapılmayacaksa (forumda bununla ilgili bilgiler vardı), operatör->()'nin neden aniden uygulanacağı açık değil (aynı sıradalar)

Bu formda, yarın veya 10 yıl içinde gerekli değildir. Ve dış benzerlik gerekli değil, fırsatlara ihtiyaç var.

STL'yi en azından kısmen C++'dan aktarmak için. Ve orada mesele sadece operatör-> üzerinde durmuyor, hala ihtiyaç duyulan birçok şey var.

operatör-> akıllı işaretçilere doğru ilk adım olacaktır.


 

Aslında, şu anda olduğu formdaki örtük oyuncu kadrosuyla her şey çok iyi değil.

 class A
{};

class B : public A
{};

void OnStart ()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast <B*>(aa);
   Print (ba1 ? "ba1 ok" : "ba1 bad cast" ); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print (ba2 ? "ba2 ok" : "ba2 bad cast" );
}

Görüldüğü gibi dinamik döküm, örtük döküme dahil edilmiştir.

ANCAK

ilk olarak, dilde dinamik döküm açıkça mevcutsa neden dahil edildiği açık değildir.

ikincisi, çok kötü bir şekilde dahil edilmiştir, çünkü bir fonksiyon durumunda dinamik döküm hatası kontrol edilebilir (çıktı kötü bir işaretçidir), ancak örtük döküm imkansızdır! çünkü denetlenmeyen bir istisna atar

2018.11.23 20:31:47.348 testi (AUDNZD,M5) 'test.mq5' (17,11) içinde işaretçilerin hatalı dökümü

ondan tam olarak sıfır duygusu var.

ya işlev olarak geçersiz bir işaretçi vermek ya da dinamik dökümü örtük dökümden çıkarmak ve bir derleme hatası vermek gerekir.

 

Evet, bu sorunun varlığında OOP ile çalışmak kötü kontrol edilir ve güvenilmezdir. Bir yerde programın bir yerindeki türü değiştirdim ve sonra bir yerde patlıyor. Bu örneklerde, hala bir şekilde koltuk değneklerinin yardımıyla çıkabilirsiniz, çünkü. basit bir işaretçi ataması var ve her şey gözünüzün önünde. Ve genel durumda, bir işaretçi bir işleve geçirildiğinde ve dinamik olarak bilinmeyen bir hedefe aktarıldığında, onu hiçbir şekilde kontrol edemezsiniz.

 
Alexey Navoykov :

Nokta, MQL'de evrensel bir operatördür.

Bakmak gibi. Evrensel olduğunu söyleyebiliriz: hem nesnelerle hem de işaretçilerle çalışır.

Ve bunu söyleyebilirsin. yalnızca nesnelerle çalışır ve işaretçilerle, yalnızca işaretçi dolaylı olarak nesneye, yani ne zaman

 class A {
public :
     void f() {}
} *a;

kayıt

    a.f();

değil ile eşdeğerdir

    a->f();

a

    (*a).f();
 

böyle bir yapı var

 struct OrdersInfo
{
   int       ticket;
   string    symbol;
   int       type;
   double    volume;
   double    open_price;
   double    stop_loss;
   double    take_profit;
   string    comment;
   int       magic;
};

bir dosyaya yazmaya çalıştığınızda değişken bir OrdersInfo sırası vardır.

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

derleyici çıktıları: 'sipariş' - nesneleri içeren yapılara izin verilmez

sorun ne olabilir?


 
Andrii Djola :

böyle bir yapı var

bir dosyaya yazmaya çalıştığınızda değişken bir OrdersInfo sırası vardır.

derleyici çıktıları: 'sipariş' - nesneleri içeren yapılara izin verilmez

sorun ne olabilir?


Burada

https://www.mql5.com/ru/docs/files/filewritestruct

kısıtlamalar listelenir.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
Teşekkür ederim
 

VPS'de MT4 trafiği negatif, geçmişin indirilmesi başladı, sayaç artmaya başladı...


 
Herhangi bir yazarın ürün sayfasına gittiğinizde hangi ürünlerin doğru platforma (4 veya 5) uygun olduğunu anlayamıyorsunuz. Bu sayfadaki ürünleri platforma göre sınıflandırmak mümkün müdür?