Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 27

 
Artyom Trishkin :
  1. Bu, yarattığınız tüm nesnelerin terminal alt sistemi tarafından otomatik olarak kaldırılmasını ve bunlara işaret edenlerin listelere yerleştirilmesini koltuk değneği olarak adlandırmanızla ilgiliydi, ancak nesnelerinizin manuel yönetimini ve koltuk değneklerinizi yaratmayı düşünmüyorsunuz. bu bir koltuk değneği
  2. 1. paragraftaki açıklamalarınız ışığında bu söz konusu değildi ve sonuç olarak - size cevabımın ana nedeni
  3. Ve bu konuda ve aynı nedenle.

Koleksiyonlar ve nesnelerin otomatik olarak silinmesi için neden koleksiyonlar oluşturuyorsunuz? :))) Manuel kontrol hakkında hiç konuşmadım. Bunu nereden aldın?)

Önce STL'yi öğrenin ve neden bahsettiğimi anlayın

 
Igor Makanu :

doğru kopyalama nasıl yapılır, bu şablona örnek verir misiniz?

AddValue yöntemini yazmak için yardımı kullandım https://www.mql5.com/ru/docs/basis/types/classes

Bütün kafamı kırdım ama MQL'de örneğimde yazdığımdan başka bir çözüm göremiyorum!

Uygun veri depolama uygulamanızı gösterin

Senin durumunda, bunu kastetmiştim.
 void   AddValue (const T & value )  { Tptr = new T( value ); mlist.Add(Tptr); }

AMA yine de yanlış bir karar. Normal karar - STL gibi bir şey kullanmak. Senin durumunda std::list.

MQL5'in bu konuda sınırlayıcı olmadığını düşünüyorum. STL kaynaklarını aynı VS'den MQL'ye çevirmeyi deneyebilirsiniz

 
Eski nesil moderatörlerde en az iki profesör vardı. programcı. şimdi hiçbiri. ve çok dikkat çekicidir)
 
Andrey Pogoreltsev :
Senin durumunda, bunu kastetmiştim.

AMA yine de yanlış bir karar. Normal karar - STL gibi bir şey kullanmak. Senin durumunda std::list.

MQL5'in bu konuda sınırlayıcı olmadığını düşünüyorum. STL kaynaklarını aynı VS'den MQL'ye çevirmeyi deneyebilirsiniz

Bir kez daha tekrarlıyorum: MQL, C++ değildir,

ve MQL'deki bir nesneye yönelik bir işaretçi, esasen bir tanıtıcıdır ve C++'daki bir işaretçi, fiziksel bir bellek adresidir.

C++ kitaplıklarını bire bir MQL'ye taşımanın amacı nedir?

 
Igor Makanu :

Bir kez daha tekrarlıyorum: MQL, C++ değildir,

ve MQL'deki bir nesneye yönelik bir işaretçi, esasen bir tanıtıcıdır ve C++'daki bir işaretçi, fiziksel bir bellek adresidir.

C++ kitaplıklarını bire bir MQL'ye taşımanın amacı nedir?

Tasarım kalıplarını düzgün bir şekilde uygulamak ve jenerik kullanarak potansiyel problemler yaratmamak.

Şaşırmış olabilirsiniz, ancak işletim sistemi işaretçileri de sanaldır. Hala fiziksel olanlara dönüştürülmeleri gerekiyor, ancak bu, işaretçilerle çalışmanın tamamen farklı bir seviyesi.

1'den 1'e taşıma işe yaramaz, ancak soyulmuş C ++ 03 mümkün sanırım. Şablonlar ve operatörler için destek de mevcuttur.

 
Andrey Pogoreltsev :

1. Şaşırmış olabilirsiniz, ancak işletim sistemi işaretçileri de sanaldır. Hala fiziksel olanlara dönüştürülmeleri gerekiyor, ancak bu, işaretçilerle çalışmanın tamamen farklı bir seviyesi.

2. 1'den 1'e taşıma işe yaramaz, ancak sadeleştirilmiş C ++ 03 mümkün sanırım. Şablonlar ve operatörler için destek de mevcuttur.

1. şaşırmadım

2. Pekala, gerçek bu - bir araya gelip C ++'dan bir bağlantı noktası yapsanız bile, yine de soruları gündeme getirecek, neden orijinalindeki gibi olmasın? - anlam?

MQL'den standart bir kitaplık var, onu kullanmak, gelecekte geliştiricilerin desteğinin sağlanacağına dair en azından bir miktar garanti var, kendimi birkaç kez yaktım - birkaç yıl önce yazılmış makalelerden grafik bileşenleri kullandım, ancak kullanımı rahat, Delphi bileşenleriyle çalışmayı çok andırıyor, ancak daha ciddi projeleri uygulamaya başladığımda makalenin yazarından bir sürü soru aldım ve tek bir cevap alamadım.

Seçkin programcılardan kimin söylediğini hatırlamıyorum ama şöyle bir şey: kod güzel veya okunaklı olmamalı, görevini yerine getirmeli.

sizinle sohbetimiz gibi, yanılmıyorsam, verilerinizle bir yapıyı listelerde saklamak istediniz, aynı görevler için yaptığım uygulamamı gösterdim - uygulamam işe yarıyor mu? - MQL program yürütme hatalarına neden olur mu? - İletişim sırasında öğrenmekle ilgileniyorum

 

Andrey Pogoreltsev :

C++03 mümkün bence. Şablonlar ve operatörler için destek de mevcuttur.

Eh, evet, başarı))

 
Igor Makanu :

kod güzel veya okunabilir olmamalı, işini yapmalı

Bu sadece siz onu değiştirmek isteyene kadar geçerlidir.

 

Her nasılsa, CLinkedList sınıfında mevcut bir hatayı zaten işaret ettim, ancak onu çoğaltacağım. Buradaki listenin başlangıç ve bitiş düğümleri birbirine kapalıdır: Son düğümün yanındaki ilk düğümü ve ilkin Önceki - son düğümü gösterir. Sonuç olarak, standart yineleme döngüsü sonsuz bir döngüye dönüşür:

 #include <Generic\LinkedList.mqh>

void OnStart ()
{
  CLinkedList< string > list;
   
  list.AddLast( "One" );
  list.AddLast( "Two" );
  list.AddLast( "Three" );
   int i= 0 ;
   for (CLinkedListNode< string > *node= list.First();  node!= NULL ;  node=node.Next())   // Цикл бесконечно бегает по кругу
    { }
} 

C#'da tabi ki böyle bir saçmalık yok. Son düğümün Sonraki'si , ilk düğümün Önceki'si gibi sıfırdır.

Bunun geliştiriciler tarafından icat edilen bir tür “özellik” olup olmadığını bilmiyorum (bundan herhangi bir fayda görmesem de), ancak her durumda, kütüphanenin davranışı orijinaline uygun olmalıdır.

 
Alexey Navoykov :

Zaten bir şekilde CLinkedList sınıfında mevcut bir hatayı işaret ettim, ama onu çoğaltacağım. Buradaki listenin başlangıç ve bitiş düğümleri birbirine kapalıdır: Son düğümün yanındaki ilk düğümü ve ilkin Önceki - son düğümü gösterir. Sonuç olarak, standart yineleme döngüsü sonsuz bir döngüye dönüşür:

C#'da tabi ki böyle bir saçmalık yok. Son düğümün Sonraki'si , ilk düğümün Önceki'si gibi sıfırdır.

Bunun geliştiriciler tarafından icat edilen bir tür “özellik” olup olmadığını bilmiyorum (bundan herhangi bir fayda görmesem de), ancak her durumda, kütüphanenin davranışı orijinaline uygun olmalıdır.

Burada yine ne oluyor? LinkedList konusunda oldukça yeterli gönderileri silerler. Bu yüzden, Avrupa'da bir yerde oturmuş, isimsiz bir moderatör olduğunu ve nefret edilen Rusların gönderilerini öfkeyle kıkırdayarak sildiğini hayal ediyorum. Bir tür çöplük, yazma isteği yok oluyor.