Hatalar, hatalar, sorular - sayfa 1172

 

MQL4 için standart kitaplıkta ve özellikle gösterge sınıflarında hatalar var.

CiATR sınıfının GetData yöntem gövdesi yoktur.

ENUM_APPLIED_VOLUME tür parametresini ( CiForce , CiOBV ) kullanan göstergeler için bir hata üretilir: hatalı numaralandırıcı kullanılamaz

Bu arada, ENUM_APPLIED_VOLUME normal bir numaralandırma gibi görünüyor, MQL4 belgelerinde var, ama aslında değil ( 'ENUM_APPLIED_VOLUME' - bildirilmemiş tanımlayıcı).

Genel olarak, lütfen tüm kitaplıklarınızı kontrol edin. Ve sonra, performanslarını bile kontrol etmeden aceleyle MT5'ten transfer edildikleri hissi var.

 

Derleme hatası , yapı 966

 #property library
#define CLR     C'255,255,255' //White

class A {
        A() { clr = CLR; }
         color clr;
};
yapı 932'de her şey yolunda
 
A100 :
Doğrudan değiştirmeden sonra, yorum nedeniyle kod derlenmiyor
 

yorumun içeriğine bağlı

 #define CLR     C'255,255,255' //не White

herşey yolunda

 
Eh, yine de derlememeli)
 

Yorumlar asla değiştirilmez - derleyici onları görmezden gelir, aksi takdirde çoğu durumda #define yorumlarla birlikte kullanılamaz //

 #define ONE 1 //один
#define TWO 2 //два

int a = ONE + TWO;
приводит к int a = 1 + 2 ;
а не к int a = 1 //один + 2 //два;
Her durumda, https://www.mql5.com/ru/forum/1111/page1190#comment_993854 içinde // yerine /**/ ile değiştirin
 #define CLR     C'255,255,255' /*White*/

Aynı sonuç - derleme hatası

 
Görünüşe göre daha önce başka birinin profilinin sayfasında, Haber Kaynağına (o kullanıcının) bir bağlantı yoluyla geçiş yapmak mümkündü. Şimdi böyle bir bağlantı görmüyorum ama URL'nin sonuna /news eklersem bu sayfa normal şekilde açılıyor. Bağlantının kullanıcı arayüzünden eksik olması bir hata mı?
 
marketeer :
Lütfen aşağıdaki durumu açıklayın. Değerleri hangi grafiğe yerleştirildiğine bağlı olarak DEĞİŞMEYEN çok para birimli bir hindi vardır - verilen semboller için değerleri hesaplar ve mevcut pencere ile hiçbir şekilde bağlantılı değildir. Bu hindide nesneleri manuel olarak çiziyorum - destek ve direnç çizgileri. Şimdi püf noktası: Piyasa İzleme'den başka bir enstrümanı pencereye sürüklerseniz hindinin görünümü aynı kalır, ancak çizgiler kaybolur. List of object iletişim kutusunu çağırırsanız, bu nesneler hala orada listelenir. Uç noktaların (tarihler ve değerler) değerleri aynı kalır (yani aynı yerlerde görünmeleri gerekir) - bu anlaşılabilir, kimse onları değiştirmedi. Ancak çizgiler görünmüyor. Daha sonra orijinal olarak orada bulunan eski aracı pencereye sürüklerseniz, çizgiler yeniden görünür hale gelir. Sorun nedir?

Bulundu ve düzeltildi.

Geri bildiriminiz için teşekkür ederiz. Genel bir söve olduğu ortaya çıktı - daha önce hep böyle çalıştı

 

Operatör !() stenografisi kullanılamıyor - derleme hatası

 class A {
public :
         bool operator !() { return ( false ); }
};

bool f1( A* a ) { return ( f3( a ) ); }
bool f2( A* a ) { return ( !a ); }             //ошибка компиляции
bool f3( A* a ) { return ( a.operator!() ); }  //нормально
bool f4( A& a ) { return ( !a ); }

void OnStart ()
{
        A *a = new A;
         Print ( f1( a ));
         Print ( f4( a ));
}

Derleyici f4( a ) öğesinin 'a'nın bir nesne anlamına geldiğini ve bir işaretçi \ tanımlayıcı olmadığını anlarsa (ve anlarsa) - sayı olarak)

o zaman !a'nın 'a' için aynı anlama geldiğini de anlaması gerekir (bir nesne, bir işaretçi\tanımlayıcı değil - bir sayı gibi)

başka bir deyişle, eğer

 class A {
     void f() {}

void OnStart ()
{
        A a1;
        A *a2 = new A;
        a1.f();
        a2.f();
}
a1.f() ve a2.f() gösterimi, a1, a2'nin bir işaretçi mi yoksa bir nesne mi olduğuna bakılmaksızın aynı anlama gelir - operatör !() neden daha kötü?
 

Şunu ekleyeceğim, örneğin operatör + () ile - derleme hatası oluşmuyor, yukarıdaki ilk örneğe sadece operatör + () eklediğinizde de oluşmuyor, ki bu hiç kullanılmaz

 class A {
public :
         bool operator !() { return ( false ); }
         bool operator +() { return ( false ); }
};
ama sonra başka bir belirsizlik ortaya çıkıyor
 class A {
public :
         bool operator !() { return ( true ); }
         bool operator +() { return ( true ); }
};

int g( A& a )  { return ( 10 ); }
int g( int )   { return ( 20 ); }

void OnStart ()
{
        A *a = new A;
         Print ( !a );            //здесь    считает                 'a' - числом ???
         Print ( a.operator!() ); //здесь не считает ( что правильно) ' a' - числом
         Print ( g( a ) );        //здесь не считает (что правильно) 'a' - числом, хотя есть g( int ) и нет g( A* )
}