Hatalar, hatalar, sorular - sayfa 1182

 
Zeleniy :

Optimizasyon çalışmıyor.

2014.08.05 19:34:42 Test cihazı optimize edilmiş parametre seçilmedi, lütfen optimize edilecek girişleri kontrol edin ve başlatma, adım ve durma değerlerini dikkatlice ayarlayın

Çeviri hiçbir şey yapmadı.

Nasıl "hiçbir şey"? Çeviri, optimizasyon için en az bir parametre seçmek ve başlangıç, bitiş ve test adımının doğru ayarlandığından emin olmak gibi bir şey vermiş olmalıdır.
 
marketeer :
Nasıl "hiçbir şey"? Çeviri, optimizasyon için en az bir parametre seçmek ve başlangıç, bitiş ve test adımının doğru ayarlandığından emin olmak gibi bir şey vermiş olmalıdır.
Garip bir şekilde, hiçbir şey anlamadığımı tercüme etti, belki sadece yorgunum, hala ikinci gün hatalarla acı çekiyorum. Teşekkürler, sözlerinize güveneceğim.
 

Böyle bir sorunla karşı karşıya kaldı. Aynı sınıftaki iki nesneyi birbiriyle karşılaştırmak gerekiyor, kolaylık olması için == operatörünü aşırı yüklemeye karar verdim. Nesneler dinamikse, ifademin çalışmadığı ve nesnelerin kendileri yerine işaretçilerinin karşılaştırıldığı ortaya çıktı. Eh, bu prensipte mantıklıdır, işaretçisi ile nesnenin kendisine geçiş işlemi gereklidir: *a == *b. Ancak MQL'de böyle bir fırsat yaratmayı unuttular. Eklemen gerek.

class T {    int x;

public :

T ( int value) { x=value; }    bool operator ==(T& other) { Print ( "compare1" );   return x==other.x; }    bool operator ==(T* other) { Print ( "compare2" );   return x==other.x; } }; //------------------ void OnStart () {   T* a= new T( 10 );   T* b= new T( 10 );       Alert (a==b);       delete a;    delete b; }

 

Şimdi düşünmeme rağmen, dilin özellikleri göz önüne alındığında, nesnelerin kendileri yerine işaretçilerin burada karşılaştırılmasının temelde yanlış olduğunu düşündüm. Sonuçta, MQL yönetilen bir dildir ve burada "nesne" kavramının kendisi, nesnenin bellekte nasıl bulunduğuna ve ona nasıl erişildiğine bakılmaksızın kullanılır. Her durumda, üyelere ve yöntemlere erişim bir noktadan geçer. Onlar. her şey C# ile aynıdır. Buna göre karşılaştırma operatörü, hem statik olarak tahsis edilmiş nesneler hem de dinamik olanlar için aynı şekilde çalışmalıdır. İşaretçileri karşılaştırmanız gerekiyorsa, bunu GetPointer() kullanarak yapmanız gerekir.

 
meat :

Şimdi düşünmeme rağmen, dilin özellikleri göz önüne alındığında, nesnelerin kendileri yerine işaretçilerin burada karşılaştırılmasının temelde yanlış olduğunu düşündüm.

MQL'de C++ ile çelişen karşılaştırma kuralları oluşturmaya, başka yollarla mümkün olduğu sürece gerek yoktur. İşaretçileriniz varsa ve nesneleri karşılaştırmanız gerekiyorsa - karşılaştırma işlevini kullanın
 bool Compare( const T& t1, const T& t2 ) { return ( t1 == t2 ); }

Alert( Compare( a, b ));
(*a == *b) formunun bir kaydına izin verilmesini önermek bir şeydir ve kayda farklı bir anlam vermek için tamamen başka bir şeydir (a == b)
 

Danışmanı test ederken hata veriyor

OrderSend işlevi için geçersiz kâr alma

Sipariş Gönderme hatası 4107

Danışman koduna girmeden nasıl düzeltebilirim?

 
A100 :
MQL'de C++ ile çelişen karşılaştırma kuralları oluşturmaya, başka yollarla mümkün olduğu sürece gerek yoktur. İşaretçileriniz varsa ve nesneleri karşılaştırmanız gerekiyorsa, karşılaştırma işlevini kullanın.(*a == *b) gibi bir gösterime izin verilmesini önermek bir şey ve bir gösterime farklı bir anlam vermek için tamamen başka bir şeydir (a == b)

Bu yüzden MQL kurallarının zaten C++ ile çeliştiğini açıklıyorum. Burada bir nesneye pointer ile erişim bir noktadan gerçekleştirilir, ancak C++ kurallarına uyarsanız -> üzerinden olmalıdır.

Onlar. C++'da "işaretçi" ve "nesne" tamamen farklı iki kavramdır, dolayısıyla sözdizimi farklıdır. Her şey katı. Ve burada her şey birbirine karışıyor. İşaretçinin özelliklerine ve yöntemlerine erişiyoruz gibi görünüyor. Kötü demiyorum. Bu, OOP için daha uygundur, örneğin C# ile de yapılır. Ama sonra diğer her şeyi aynı damarda uygulamanız gerekir. Tek bir kavram olmalı. Aksi takdirde çelişkiler ve kafa karışıklığı ortaya çıkar: bazı durumlarda pointer'ı nesnenin kendisi ile aynı şekilde kullanırız ve diğer durumlarda ise pointer aniden kendi yaşamı ile hayat bulur.

Tüm bunların pratik tarafına gidersek, o zaman sorunla zaten yüzleşmem gerekiyordu. Kod, statik nesneler kullandı. Sonra bazılarını dinamik olanlarla değiştirmeye karar verdim. Sonuç olarak, karşılaştırma ve atama işlemleri oldukça farklı çalışmaya başladı. Ve bu sorunu tespit etmek zordu, çünkü. program normal şekilde derlenmeye ve çalışmaya devam ediyor, ancak olması gerektiği gibi değil.

 

Kodumda bir nesne içeren bir sınıfım var:

CClass
{
  ...
  CObj  Object; 
  ...
};

CObj sınıfı bundan önce bildirilir.

Derlemeye çalışırken bir hata oluşuyor: 'Nesne' - ayarlanamıyor

Bu hata ne anlama geliyor ve nedeni ne olabilir? Bu hatayı daha önce gördüğümü hatırlamıyorum. CObj sınıfının bir yapıcısı ve yıkıcısı vardır.

Object'i bir değişken olarak bildirmeye çalıştım - her şey yolunda. Ama sınıfın bir parçası olarak - istemiyor.

 
Peki, birisi bu hatanın ne olduğunu açıklayabilir mi ("- ayarlanamaz")? Hangi durumlarda ortaya çıkar?
 
meat :
Peki, birisi bu hatanın ne olduğunu açıklayabilir mi ("- ayarlanamaz") ? Hangi durumlarda ortaya çıkar?
Bu nesne için ZeroMemory işlevini kullanamazsınız