class A { public :
virtualvoid f() { Print ( __FUNCTION__ ); }
};
class B : public A { public :
virtualvoid f() { Print ( __FUNCTION__ ); }
};
class H { public :
H( A* a ) { H::s[ 0 ] = a; }
staticvoid g();
static A* s[ 1 ];
};
A *H::s[ 1 ] = { 0 };
void H::g() { H::s[ 0 ].f(); } //еще обратил внимание, что в этом месте редактор выделяет (.f) зеленым
voidOnStart ()
{
A* b = new B();
H h( b );
H::g(); //печатает A::f()
delete ( b );
}
Pazardaki spam göndericilerle ne yapmalı? Bir şikayet yazdı, spam gönderici bir günlüğüne yasaklandı, şimdi zaten yasağı kaldırıldı ve bokları askıda kalıyor. Yoksa tamam mı? Ürün tartışma sayfası müşteri geri bildirimi için değil mi?
h(A* a) çağrısının tüm durumlarında hata 358'i derleyin
class A {
};
class B {
public :
B() : a1( NULL ), a2( NULL ), a3( NULL ), a4( NULL ) {}
void f() const {
h( a1 ); // не обоснована (1)
h( a2 ); // не обоснована (2)
h( a3 ); // обоснована (3)
h( a4 ); // обоснована (4)
}
A * a1;
A * const a2;
const A * a3;
const A * const a4;
};
void h( A* a )
{
}
h( const A* a) olmadığı için yalnızca (3) ve (4)'te gerekçelendirilir
Benzer bir durum zaten düzeltildi https://www.mql5.com/ru/forum/1111/page1218#comment_1058402 , ancak hatanın oluşumu const'ın varlığından etkilendiğinden muhtemelen farklı bir neden vardır. void f() const bildirimi ve üye işlevleri yok
Yapı 976'da derlenmez (hata 358, ancak yapı 975'te hata olmaması nedeniyle daha önce açıklananlardan farklıdır)
class A {};
struct S { int s; };
void h1( A* a ) {}
void h2( S& s ) {}
void h3( const S& s ) {}
class B {
public :
void f1() const { h1( this .a ); } //не обоснованная и возникла только в build 976
// void f2() const { h2( this.s ); } // обоснованная ошибка в build 976void f3() const { h3( this .s ); } //нормально
A* a;
S s;
};
Belki de yapı 976'da bir const sınıf yönteminden çağrılan normal bir işlevin, const& referansı olmayan bir tarafından kendisine iletilen sınıf üyelerini değiştirebileceği gerçeğiyle ilgili bir hatanın düzeltilmesi nedeniyle. Ancak burada sınıf üyesi bir işaretçidir ve değerinin h( A* a çağrıldığında değiştirilmemesi garanti edilir), ancak yalnızca h( A* &a ) bildirildiğinde değiştirilebilir.
Yapı 976'da derlenmez (hata 358, ancak yapı 975'te hata olmaması nedeniyle daha önce açıklananlardan farklıdır)
Belki de yapı 976'da bir const sınıf yönteminden çağrılan normal bir işlevin, const& referansı olmayan bir tarafından kendisine iletilen sınıf üyelerini değiştirebileceği gerçeğiyle ilgili bir hatanın düzeltilmesi nedeniyle. Ancak burada sınıf üyesi bir işaretçidir ve değerinin h( A* a ) çağrılırken değiştirilmemesi garanti edilir, ancak yalnızca h( A* &a ) bildirilirken değiştirilebilir.
Sanal işlevlerde hata
Sonuç: A::f(), ancak B::f() olmalıdır
META TRADER 4'ü OS MAVERICKS'e yüklemeye yardımcı olun, TÜM PROGRAMLARI İNDİRİN, MAC'DE OYNAYIN ^ TAMAMEN YENİ VE HATA VERİYOR.
/*moderatör: hatanın metnini dosya olarak ekleyin*/
2 - hata ayıklamadan önce.
3- sonra.
Belki farklılıklar vardır, hiçbir şey anlamıyorum)
Çok teşekkürler)
Derleme Hatası
const statik izlemek zorunda değilken
Ek olarak, bu hayali bir korumadır, çünkü statik, olağan h() ve A:: f() const işlevi tarafından değiştirildiğinden, const bunu bilmiyor bile
Sanal işlevlerde hata
Sonuç: A::f(), ancak B::f() olmalıdır
Derleme Hatası
const statik izlemek zorunda değilken
Ek olarak, bu hayali bir korumadır, çünkü statik, olağan işlev h () ve A:: f () const tarafından değiştirildiğinden, const bunu bilmiyor bile
h(A* a) çağrısının tüm durumlarında hata 358'i derleyin
h( const A* a) olmadığı için yalnızca (3) ve (4)'te gerekçelendirilir
Benzer bir durum zaten düzeltildi https://www.mql5.com/ru/forum/1111/page1218#comment_1058402 , ancak hatanın oluşumu const'ın varlığından etkilendiğinden muhtemelen farklı bir neden vardır. void f() const bildirimi ve üye işlevleri yok
Yapı 976'da derlenmez (hata 358, ancak yapı 975'te hata olmaması nedeniyle daha önce açıklananlardan farklıdır)
Belki de yapı 976'da bir const sınıf yönteminden çağrılan normal bir işlevin, const& referansı olmayan bir tarafından kendisine iletilen sınıf üyelerini değiştirebileceği gerçeğiyle ilgili bir hatanın düzeltilmesi nedeniyle. Ancak burada sınıf üyesi bir işaretçidir ve değerinin h( A* a çağrıldığında değiştirilmemesi garanti edilir), ancak yalnızca h( A* &a ) bildirildiğinde değiştirilebilir.Yapı 976'da derlenmez (hata 358, ancak yapı 975'te hata olmaması nedeniyle daha önce açıklananlardan farklıdır)
Belki de yapı 976'da bir const sınıf yönteminden çağrılan normal bir işlevin, const& referansı olmayan bir tarafından kendisine iletilen sınıf üyelerini değiştirebileceği gerçeğiyle ilgili bir hatanın düzeltilmesi nedeniyle. Ancak burada sınıf üyesi bir işaretçidir ve değerinin h( A* a ) çağrılırken değiştirilmemesi garanti edilir, ancak yalnızca h( A* &a ) bildirilirken değiştirilebilir.