Hatalar, hatalar, sorular - sayfa 1749

 
fxsaber :
Kod tabanındabir onay göstergesi tasarladı. Ancak kaynakları ekleyemiyorum - "Dosya ekle" yi tıklıyorum, yazı kayboluyor, ancak dosya seçme arayüzü görünmüyor.
adblock yüklü mü? tüm açılır pencereleri engelleyen
 
Vladislav Andruschenko :
adblock yüklü mü? tüm açılır pencereleri engelleyen

Hiçbir şeyi değiştirmedi. Her şey daha önce çalıştı.

Ödeme sırasında bu butona tıklıyorum.

Cevap bundan başka bir şey değil

 
Sergei Vladimirov :
Evet, sorunuzu anlıyorum. Daha uygun imzalı bir fonksiyon var ama korumalı olduğu için çağrılamaz. Evet, davranış stüdyodan farklı: MKL'de daha katı bir tip kontrolü olduğu ortaya çıktı (bu durumda). Bunun bir hata olarak kabul edilip edilmediğini bilmiyorum. İşleve iletilen argümanın türünü kontrol ederseniz, sorun olmaz.

Kontrol oldukça seçicidir ve bu nedenle daha tartışmalıdır, bu da bundan kaynaklanmaktadır.

class A {
public :
         void f( int ) const {} /*(1)*/         
         void f( int )       {} /*(2)*/
};
class B : public A {
public :
         void f( int ) const {} /*(3)*/
};
void OnStart ()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
Burada (*) içinde toplu olarak (const B b 'yi hesaba katmadan) A::f/*(2)*/ çağrısı daha uygundur

Ancak, türetilmiş sınıf tam olarak doğru olana sahipse, C++ temel sınıfı her zaman daha uygun bir yönteme ayrıştırmaz.

Ve MQL - önceki örnekte, daha uygun bir yöntem için temel sınıfı analiz etti, ancak bunda onu analiz etmiyor (burada, C++ gibi, B::f/*(3)*/ olarak adlandıracak), hangi tek bir yaklaşım olmadığı anlamına gelir

Tutarsız denetime başka bir örnek: C++ aşağıdaki kodu bulur

class A { public :
         void f(   int i ) const {}
         void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f(( int ) 0 );
}
hatalı ve MQL - katı
 
A100 :

Kontrol oldukça seçicidir ve bu nedenle daha tartışmalıdır, bu da bundan kaynaklanmaktadır.

class A {
public :
         void f( int ) const {} /*(1)*/         
         void f( int )       {} /*(2)*/
};
class B : public A {
public :
         void f( int ) const {} /*(3)*/
};
void OnStart ()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
Burada (*) içinde toplu olarak (const B b 'yi hesaba katmadan) A::f/*(2)*/ çağrısı daha uygundur

Ancak, türetilmiş sınıf tam olarak doğru olana sahipse, C++ temel sınıfı her zaman daha uygun bir yönteme ayrıştırmaz.

Ve MQL - önceki örnekte, daha uygun bir yöntem için temel sınıfı analiz etti, ancak bunda onu analiz etmiyor (burada, C++ gibi, B::f/*(3)*/ olarak adlandıracak), hangi tek bir yaklaşım olmadığı anlamına gelir

Tutarsız denetime başka bir örnek: C++ aşağıdaki kodu bulur

class A { public :
         void f(   int i ) const {}
         void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f(( int ) 0 );
}
hatalı ve MQL - katı
C++ için hangi derleyiciniz var? Gcc'm var ve her şey hatasız çalışıyor
 
coderex :
C++ için hangi derleyiciniz var? Gcc'm var ve her şey hatasız çalışıyor
Ve sonunda gcc hangi işlevi çağırıyor?
class A { public :
         void f(          int i ) const {} //1
         void f( unsigned int i )       {} //2
};
void OnStart ()
{
        A a;
        a.f(( int ) 0 );
}

(1 yada 2). Şimdi derleyici mesajını yapıştıracağım

Bu gerçekten - sıkı kontrol: bir yöntem imzaya göre daha uygundur, diğeri - sabitliğe göre

 
A100 :

Bu gerçekten - sıkı kontrol: bir yöntem imzaya göre daha uygundur, diğeri - sabitliğe göre

Peki, const A a; yaparsanız, o zaman (1) çağrılmalıdır. Değilse, derleyicinin takdirine bağlı olarak. Onlar. kesinlik olamaz. Ve neden böyle bir yazı olduğu belli değil.
 
fxsaber :
Ve neden böyle bir yazı olduğu belli değil.

f -> operatörünü[] değiştirin, son örneğinizi alın - hem sol hem de sağ [] yapmayı düşünün. Zevkinize göre sabitlik ekleyin - ardından bir şablona sarın ve benzer bir şey elde edeceksiniz.

Eğer const yapılırsa - if içermeyen değişken kabul edilir

Belirsizlik söz konusu değilse, en azından bir uyarı yapılmalıdır.

 
A100 :
f -> operatörünü[] değiştirin, son örneğinizi alın - hem sol hem de sağ [] yapmayı düşünün. Zevkinize göre sabitlik ekleyin - ardından bir şablona sarın ve benzer bir şey elde edeceksiniz.
Ne örneğinden bahsediyorsun? Kaynağı değil, çalışması gereken son kaydı getirebilir misiniz?
 
fxsaber :
Ne örneğinden bahsediyorsun? Kaynağı değil, çalışması gereken son kaydı getirebilir misiniz?

Sonuç böyle bir şey olmalı

void OnStart ()
{
        A< int > a;
         int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
 
A100 :

Sonuç böyle bir şey olmalı

void OnStart ()
{
        A< int > a;
         int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
İndeksler sabit mi?