Hatalar, hatalar, sorular - sayfa 2330

 
Ilyas :

Nedenini kabaca anladım. global bir değişkenim var

CArrayObj actobjects;

Ortamın ve mektubun başlatılması sırasına sahip bir şey görünür, eğer actobjects bir işaretçiyse ve ben kendim oraya bir dizi yerleştirirsem, o zaman hiçbir şey düşmez. Global değişkenlerde bir sınıf yanlış bir uygulamadır, tabii ki yeniden yazacağım. Ancak fonksiyonlardaki statik dizilerle ilgili sorunlar da ortaya çıkacaktır (sonuçta, kural µl'de geçerli değildir - fonksiyona ilk girişte başlatma).

Genel olarak, bu bir hata olarak kabul edilirse, yaklaşık olarak nedenini bilerek, muhtemelen onu yerelleştirebilirim.

 
pavlick_ :

Genel olarak, bu bir hata olarak kabul edilirse, yaklaşık olarak nedenini bilerek, muhtemelen onu yerelleştirebilirim.

Hayır yakalayamıyorum, şifreyi kestikten sonra mucizevi bir şekilde kayboluyor. Bazı satırların (sonbahara kadar uygulanmayan) yorumlanması bile etkiliyor.

 

mqh cinsinden uzun bir kod sınıfı var. Orijinalden yalnızca iki satırda farklı olan tam olarak aynı sınıfı oluşturmanız gerekir (küçüktür işareti yerine, büyüktür işareti olmalıdır).

Bu, hemen hemen aynı başka bir mqh oluşturmadan yapılabilir mi?


Bir sınıf kısa olduğunda, çok satırlı bir makroya kolayca dönüştürülebilir ve her şey basitleşir. Ama burada kod uzun.

Bir mqh klonu oluşturmak istemiyorum çünkü bir mqh'yi düzeltirsem, tüm eylemlerimi ikinci saniyede tekrarlamam gerekecek. Bir de insan faktörü var unutkanlık ve dikkatsizlik.


Bir şablon sınıfı aracılığıyla hala mümkündür. Ancak bunun yürütme hızını nasıl etkileyeceği hiç de açık değil. Hızlı koşular için sınıf gereklidir.

 
fxsaber :
#ifdef
 
TheXpert :
#ifdef

Çalışmayacak. Her iki sınıf da çalışır durumda olmalıdır.

 
fxsaber :

Çalışmayacak. Her iki sınıf da çalışır durumda olmalıdır.

Herhangi bir sorun görmüyorum.

_____________

miras

farklılıkları ayrı küçük sınıflara koymak

 
TheXpert :

Herhangi bir sorun görmüyorum.

_____________

miras

farklılıkları ayrı küçük sınıflara koymak

Sınıfta birkaç uygun boyutlu yöntem vardır. Her yöntemde, yalnızca ">" işaretini "<" işaretiyle değiştirmeniz yeterlidir.

Bu şekilde sanal kullanabilirsiniz
 class A
{
private :
   virtual bool Compare()
  {
     return ( true );
  }
public :

   bool f()
  {
     return ( this .Compare());
  }
};

class B : public A
{
private :
   virtual bool Compare()
  {
     return ( false );
  }
};


void OnStart ()
{
  A a;
  B b;
  
   Print (a.f());
   Print (b.f());
}


Ancak, ne yazık ki, yine de sınıfın başlangıç değerini geçmeniz gerekiyor. Görünüşe göre, hala bir şablon aracılığıyla yapmak zorundasın.

 
fxsaber :

Bazı bağdaştırıcıları şablon parametrelerinden geçirirdim (orada herhangi bir fren olmamalıdır), ancak bunu çok beceriksizce istiyorsanız, siz de yapabilirsiniz. Başlık dosyasına sabit bir bağlantı yapın (yanılmıyorsam mklink /H <link> <target>. Konuyu google'da aratabilirsiniz: "windows sabit bağlantı oluşturur"). Eh, bu ekonomiyi her zamanki gibi açıyoruz

 #define _N C1    // имя класса
#define _M "c1"  // какой-то параметр
#include <qq.mqh>
#undef _N
#undef _M
#define _N C2
#define _M "c2"
#include <ee.mqh> // жёсткая ссылка на qq.mqh
#undef _N
#undef _M
 
pavlick_ :

Bazı bağdaştırıcıları şablon parametrelerinden geçirirdim (orada herhangi bir fren olmamalıdır), ancak bunu çok beceriksizce istiyorsanız, siz de yapabilirsiniz. Başlık dosyasına sabit bir bağlantı yapın (yanılmıyorsam mklink /H <link> <target>. Konuyu google'da aratabilirsiniz: "windows sabit bağlantı oluşturur"). Eh, bu ekonomiyi her zamanki gibi açıyoruz

Soruyu anlamadın.

 
fxsaber :

Soruyu anlamadın.

Peki hz, beni anladığına emin misin? her ihtimale karşı, qq.mqh ve ee.mqh'yi listelemek (bir varlık, birini değiştirmek diğerini değiştirir)

 class _N
{
public :
   void f() { Alert (_M);}
};

Her şey sıralı, sınıf bir makroda değil, _M dışında hemen hemen aynı.