Hatalar, hatalar, sorular - sayfa 1087

 

Steno postfix operatörü++ gösterimi, bir temel sınıf işaretçisini türetilmiş bir sınıfa açıkça yayınlarken derlenmiyor

 class A {
};

class B : public A {
public :
         void      operator ++( int ) {}
         void      operator ++()      {}
};

void f( A* a )
{
        ((B *)a). operator ++( 0 ); //нормально
        ((B *)a). operator ++();     //нормально
        ++((B *)a);               //нормально
        ((B *)a)++;               //ошибка
}
 
En azından derleyici, af() öğesinin const olmadığına dair bir uyarı vermelidir .
 class A {
public :
         int f() { return ( 1 ); }
};

class B {
public :
                B( const A *aa ) : a( aa ) {}
         int g() { return ( a.f() ); } //должно быть предупреждение, поскольку a.f() не const
         const A *a;
};
 
A100 :
En azından derleyici, af() öğesinin const olmadığına dair bir uyarı vermelidir .
İlginiz için teşekkürler, her iki hata da düzeltildi.
 
mql5 :
İlginiz için teşekkürler, her iki hata da düzeltildi.
Yalnızca sonuncusu resmi olarak bir hata değildir - yalnızca bir uyarı olmalıdır. Hata yalnızca
 class B {
public :
        A * const a;
};

Ama şablonlarda. Örnekler daha sonra verilecektir

 

Burada da belli değil.

 class A {
public :
};

void ex1( const A* &t1, const A* &t2 )
{
         const A* t = t1;
        t1 = t2;
        t2 = t;
}

void OnStart ()
{
     const A *a1 = new A(), *a2 = new A();
    Print ( "Было :" a1, " ", a2 ); // Было :1 2
    ex1( a1, a2 );
    Print ( "Стало:" a1, " " , a2 ); // Стало:2 1
    delete ( a1 );
    delete ( a2 );
}

her şey düzgün çalışıyor, ancak bir ara işlev eklersek ex2(...)

 void ex2( const A* &t1, const A* &t2 ) { ex1( t1, t2 ); }

void OnStart ()
{
    сonst A *a1 = new A(), *a2 = new A();
    Print ( "Было: " , a1, " ", a2 ); // Было :1 2
    ex2( a1, a2 );
    Print ( "Стало:", a1, " ", a2 ); // Cтало:2 2           <-----
    delete ( a1 ); delete ( a2 );
}

Sonuç farklı. ex2(...) ne yaptı? - daha fazla referansla işaretçiler geçti

Bak lütfen

 
A100 :

Burada da belli değil.

her şey düzgün çalışıyor, ancak bir ara işlev eklersek ex2(...)

Sonuç farklı. ex2(...) ne yaptı? - daha fazla referansla işaretçiler geçti

Bak lütfen

Teşekkürler, dil iyileştirici hatası düzeltildi.
 

Zaten ilk kez değil, sadece burada fotoğraflar yüklenirken elde ediliyor, bu da bazı kriterler olduğu anlamına geliyor (muhtemelen belirli bir boyutunuz var)
). Her yerde normalde görüntülenir. Lütfen bana sorunun ne olduğunu söyle.


 
Bir makroda sonuç türü dönüştürme kullanılıyorsa ve dönüş değeri daha sonra kullanılmazsa (bazen gerekli, bazen değil) gereksiz bir derleme hatası oluşur .
 int g( int x ) { return ( x ); }

#define F( X )    ( long )g( X )

void OnStart ()
{
         int f = F( 0 ); //нормально
        F( 0 );         //ошибка компиляции
}
 
A100 :
Bir makroda sonuç türü dönüştürme kullanılıyorsa ve dönüş değeri daha sonra kullanılmazsa (bazen gerekli, bazen değil) gereksiz bir derleme hatası oluşur .

Tanımlamaların kullanımı ile ilgisi yoktur.

Tanımlamanın basit eşdeğeri de aynı hatayı verir

( long )g( 0 );


'(long)' - expression has no effect


PS Şimdi uyarı olacak.

 

Göstergeyi yeniden derledikten sonra, dinamik dizilerle çalışırken "dizi aralık dışı" hatası görünmeye başladı.

Daha önce orada değildi. Ne yapalım?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5