Hatalar, hatalar, sorular - sayfa 1356

 
Vasiliy Sokolov :
Çok havalı ve en önemlisi ideolojik olarak doğru. için iki el!
O zaman ideolojik olarak daha doğru olurdu
 class A { public:
        bool operator !=( A* ) {}
        bool operator   <( A* ) {}
};
void f()
{
    A *a1, *a2;
    a1 != a2; //здесь простое сравнение указателей вместо вызова operator !=()
    a1 <  a2; //здесь вызывается operator <()
}
böylece şu anda olduğu gibi eşitlik için işaretçileri karşılaştırmak yerine operatör!=() çağrılır. Ve işaretçilerin karşılaştırılması, ::GetPointer(...) gibi özel bir işlevle yapılabilir.

Ancak bu, önemli bir rahatsızlık getireceği basit bir nedenden dolayı yapılmaz ve yalnızca ideolojik doğruluk bir avantaj olacaktır.

 
Uzun süredir güncelleme almadım: MetaTrader5 build 1159 (MetaQuotes-Demo'ya bağlı). Komut derleyici, yapı 1162 ile yüklenir
 
Vasiliy Sokolov :

O zaman dize de belirli bir sayı kümesidir. Ve bir resim aynı zamanda bir sayı ve bir mikro devre üzerindeki elektriksel bir dürtüdür...

Genel olarak elektrik mühendisliğini öğren meslektaşım.

C++'da işaretçiler ile MQL/C# ve diğer bazı dillerde tanımlayıcılar arasında böyle bir karşılaştırma yapabilirsiniz.

Görev - Bir arkadaşımla canlı sohbet etmek istiyorum.

1. İşaretçiler. Sokağı, ev numarasını ve daireyi biliyoruz. Adrese gidiyoruz, bir arkadaşı uyandırıyoruz, bir balon çıkarıyoruz, şiddetle seviniyor, iletişim kuruyoruz))

2. Tanımlayıcılar. Tam adresi bilmiyoruz, yabancıların eve girmesine izin verilmiyor, örneğin burası FSB binası. Evde bir arkadaşının adıyla (tanımlayıcıya göre) adres vermeyi reddeden, eve girmesine (adres alanına) izin vermeyen bir kontrol noktası var. Güvenlik bir arkadaşını arar ve gitmesini ister. Dışarı çıkıyor, mutlu bir şekilde bir baloncuk çıkarıyorsunuz, tıslıyor, - nesiniz !!! derhal kaldırın!!! Böylece yürüdük ... Elinizde açılmamış bir şişeyle eve yürürken, tanımlayıcıların işaretçi yetenekleri karşılığında güvenlik sağladığını çok iyi anlıyorsunuz.

 
Vasiliy Sokolov :

Genel olarak elektrik mühendisliğini öğren meslektaşım.

Başka argümanlar var mı?
 
A100 :
Başka argümanlar var mı?
peki sen?
 
A100 :
İşaretçilerin açıkça sayılara dönüştürüldüğü kod parçalarım var (harici yazma/okuma sistemleriyle arayüz oluşturmak için ve ayrıca hata analizi ve hata ayıklama için), bu yasaklanırsa esneklik azalır ve yeniden yapılması gerekir.
Argüman ilginç, düşünmek zaman alıyor. Lütfen bir uygulama oluşturun, daha ayrıntılı olarak tartışacağız.
 

Bu arada, ilk durumda bir nesneye açık erişim sağlamak için * ve & operatörlerini MQL'ye dahil etmeye ve ikinci durumda (hantal GetPointer yerine) nesne işaretçisini almaya ne dersiniz? Ve yıldız işareti basitçe umutsuzca gereklidir. Dilde yerini alacak bir şey yok. Bu olmadan, A100'ün biraz daha yukarıda belirttiği gibi, nesnelerin kendileri yerine bazı eylemlerin işaretçilerle gerçekleştirildiği gibi durumları kontrol etmek imkansızdır. Şahsen benim için bu sürekli bir sorun, her zaman tetikte olmalıyım veya her yerde A.operator=(B), A.operator!=(B)'yi açıkça belirtmeliyim, yani. özlülük kaybolur ve operatör aşırı yüklemesi aslında anlamını kaybeder.

Bir şekilde bu sorunu zaten gündeme getirdim, ancak konu öldü. Sonunda bu soruyu bitirelim.

 

Dış değişkenler hakkında soru.

Program yürütülürken extern değişkeni değiştiğinde bir durumla karşılaştım ancak zaman dilimi değiştiğinde yine özellikler penceresinde ayarlanan değeri alıyor. Örneğin, başlatmadan önce TradeEnable değerini EnableAll olarak ayarlarsam ve program yürütüldüğünde değeri EnableBuy olarak değiştirirsem, grafiği başka bir zaman dilimine tıkladığımda değer EnableAll'a dönecektir. Timer olayındaki değeri tanımlıyorum ve Comment üzerinden gösteriyorum, hata olamaz.

 enum ETradeEnable {EnableAll, EnableBuy, EnableSell, DisableAll};
extern ETradeEnable TradeEnable = EnableAll;

Grafikler arasında geçiş yapmak, TradeEnable değişkenini hiçbir şekilde etkilemez. Yardımın okunması - Giriş değişkenlerinin aksine, harici değişkenlerin değerleri program çalışması sırasında programlı olarak değiştirilebilir.

OnDeinit ve OnInit'e bu şekilde sahibim.

S: Bir şey anlamıyorum veya TradeEnable'ı değiştirmek bir çalışma zamanı hatası mı?

 int LastDeinitReason = 0 ;

void OnDeinit ( const int reason)
{
    LastDeinitReason = reason;
     if (reason== REASON_CHARTCHANGE || reason== REASON_TEMPLATE || reason== REASON_PARAMETERS )
         return ;
     EventKillTimer ();
// далее код при завершении работы советника
}

int OnInit ()
{
     if (LastDeinitReason== REASON_CHARTCHANGE || LastDeinitReason== REASON_TEMPLATE )
    {
        LastDeinitReason = 0 ;
         return ( INIT_SUCCEEDED );
    }
     if (LastDeinitReason== REASON_PARAMETERS )
    {
        SetParams();
         return ( INIT_SUCCEEDED );                              
    }
// далее код инициализации при запуске
}
 
Alexey Navoykov :

Sonunda bu soruyu bitirelim.

Orada, diğerlerini korumak için iki operatör (== ve !=) feda edilir.

Çıktıyı şablonda görüyorum

 template < typename T1, typename T2>
bool IsEqualPointer( const T1 *t1, const T2 *t2 )
{
    return ( ulong (t1) == ulong (t2) );
}

Operatör==(!=) tanımlıysa, çağrılır. Tanımlanmamışsa, işaretçiler eşitlik için karşılaştırılır. Operatör==(!=) tanımlanmışsa ve eşitlik için işaretçileri karşılaştırmak gerekiyorsa, bu belirtilen şablon kullanılarak yapılabilir.

Mevcut sistemdeki değişiklikler minimum düzeydedir ve en önemlisi, operatörü aşırı yüklemeden eşitlik için işaretçileri basitçe karşılaştıranları etkilemeyecektir==(!=)

 
A100 :

Orada, diğerlerini korumak için iki operatör (== ve !=) feda edilir.

Çıktıyı şablonda görüyorum

Operatör==(!=) tanımlıysa, çağrılır. Tanımlanmamışsa, işaretçiler eşitlik için karşılaştırılır. Operatör==(!=) tanımlanmışsa ve eşitlik için işaretçileri karşılaştırmak gerekiyorsa, bu belirtilen şablon kullanılarak yapılabilir.

Mevcut sistemdeki değişiklikler minimum düzeydedir ve en önemlisi, operatörü aşırı yüklemeden işaretçileri basitçe karşılaştıranları etkilemeyecektir==(!=)

Karşılaştırma, sorunun yarısıdır. Bir de görev var. Evet ve şablon sadece bir koltuk değneği. Tabii ki, hem karşılaştırma hem de atamayı ayrı işlevler üzerinden yapabilirsiniz, ama ne anlamı var? Bu, geliştiricileri sağlam bir karar vermeye ikna etmekle ilgilidir.