Hatalar, hatalar, sorular - sayfa 2258

 
Anatoli Kazharski :

Yalnızca MQL programının bulunduğu çizelgenin değil, tüm çizelgelerin özelliklerindeki değişiklikleri izleme yeteneğine ihtiyacımız var.

Bir zamanlayıcı ile koltuk değneği yapın.

 
fxsaber :

Bir zamanlayıcı ile koltuk değneği yapın.

Koltuk değneği yapmak istemiyorum. MQ geliştiricileri olasılıkları genişletebilir.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Anatoli Kazharski , 2018.08.20 08:11

Yalnızca MQL programının bulunduğu çizelgenin değil, tüm çizelgelerin özelliklerindeki değişiklikleri izleme yeteneğine ihtiyacımız var.

Artık CHARTEVENT_CHART_CHANGE olayı başka hiçbir parametre içermiyor:

Etkinlik

id parametre değeri

lparam parametre değeri

dparam parametresinin değeri

sparam parametre değeri

Grafiğin yeniden boyutlandırılması veya özellikler iletişim kutusu aracılığıyla grafiğin özelliklerinin değiştirilmesi olayı

CHARTEVENT_CHART_CHANGE

-

-

-

//---

Bu olayı diğer açık grafiklerde izlemek için, istediğiniz grafiğin ID'sini belirterek izlemeyi etkinleştirebilirsiniz.

Örneğin, bunun gibi:

 ChartSetInteger (chart_id,CHART_EVENT_CHART_CHANGE, true );
//---


lparam parametresi, üzerinde değişikliklerin yapıldığı grafiğin tanımlayıcısı olabilir. Bir sparam parametresi olarak, sembolün adı.

 
A100 :

Yürütme sırasında hata:

Sonuç: Beklenen:

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Hata:4007

Ve bu yüzden:

iyi. Fark ne? Dizi boyutu neden birdenbire 753790660'a (bir yerine) eşit oldu ve sonuç olarak bellek aniden sona erdi (4007)? MT5\1881\32

Üstelik... ilk varyantta sınıftan tam anlamıyla üç karakteri silerseniz, sonuç da normal olacaktır.

Mesaj için teşekkürler.

Düzeltildi.


Geçerli derlemede çalışmak için, yöntemlerini bildirirken sınıfın kapsamını belirtmeyin.


Diğer hata raporları bununla ilgilidir ve düzeltmelerden sonra yeniden üretilmez.

 

yardımdan örnek çalışmıyor:

https://www.mql5.com/ru/docs/basis/function/operationoverload

sayfanın en altındaki örnek şu kelimelerle çalışmıyor:

Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.

derleyici yazıyor:

'CMatrix' nesnesi döndürülemez, 'CMatrix::CMatrix(const CMatrix &)' kopya yapıcısı bulunamadı tst.mq5 244 on dört

'CMatrix' nesnesi döndürülemez, 'CMatrix::CMatrix(const CMatrix &)' kopya yapıcısı bulunamadı tst.mq5 261 on bir

'CMatrix' nesnesi döndürülemez, 'CMatrix::CMatrix(const CMatrix &)' kopya yapıcısı bulunamadı tst.mq5 281 on dört

'CMatrix' nesnesi döndürülemez, 'CMatrix::CMatrix(const CMatrix &)' kopya yapıcısı bulunamadı tst.mq5 303 on bir

4 hata(lar), 0 uyarı(lar) 5 1




Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

Derleme sırasında hata oluştu (ME\1881\32)

 template<typename T>
class B;
template < typename T>
class A {
        B< int > *f() { return NULL ; }
};
template < typename T>
class B : public A<T> {}; //Error: 'A' - struct undefined
void OnStart ()
{
        A< int > *a;
        B< int > *b;
}

Ve bu yüzden:

 void OnStart ()
{
        B< int > *b;
        A< int > *a;
}
iyi. Fark ne?
 
fxsaber :

Nedeni bu değil.

bu, kodu okurken çok yardımcı olur ve bazı durumlarda hataların önlenmesine yardımcı olur.

Bunun MQL'de her yerde çalışmadığını not ediyorum:

 class A { protected :
         int a;
};
class B : public A {
         int a;
         void f1() { this .a    = 0 ; } //нормально
         void f2() { this .A::a = 0 ; } //Error: '::' - syntax error
};

C++'da ne hatasız derlenir

 
A100 :

Bunun MQL'de her yerde çalışmadığını not ediyorum:

C++'da ne hatasız derlenir

C++ sapıklıklar hakkında çok şey biliyor. Belki makrolarda bir yerde bu kullanılabilir, ancak doğrudan kullanılamaz.

 
Sağ üst köşede, okunmamış PM'lerim olduğu her zaman bir simge asılı kalıyor. Sıfırlama çalışmıyor - okuyun. Lütfen bir "Tümünü Oku" düğmesi ekleyin.
 
fxsaber :

Belki makrolarda bir yerde bu kullanılabilir, ancak doğrudan kullanılamaz.

Makroların bununla kesinlikle hiçbir ilgisi yoktur - bunu normal bir işaretçi ile değiştirin ve sözdizimi tamamen aynı olacaktır:

 struct A {
         int x;
};
struct B : A {
         int x;
};
void OnStart ()
{
        B b;
        b.A::x = 1 ; //Error: '::' - syntax error
}
MQL'de açıkça bA::x'e başvuramazsınız, ancak C++'da yapabilirsiniz. Neden böyle bir sınırlama?
 
A100 :

Makroların bununla kesinlikle hiçbir ilgisi yoktur - bunu normal bir işaretçi ile değiştirin ve sözdizimi tamamen aynı olacaktır:

Bu durumda, haklı. Bununla varyant - neden böyle yazdığı belli değil. A:: zaten her şey hakkında konuştuğunda.