Hatalar, hatalar, sorular - sayfa 1588

 

Bunu düşünüyor musun

 void f() const

işaretçiyi değiştiremez, ancak işaretçinin başvurduğu nesneyi değiştirebilir. MQL5'te değiştirilemeyecek böyle bir işaretçi yoktur. Bu nedenle, const değiştiricisi her zaman işaretçinin başvurduğu nesnelere uygulanır.

 
Anton Zverev :

O zaman sabit işaretçinin burada nerede olduğunu düşünüyorsunuz?!

f() ve g() yöntemlerinde a işaretçisi sabit hale gelir.

MQL5'te değiştirilemeyecek böyle bir işaretçi yoktur. Bu nedenle, const değiştiricisi her zaman işaretçinin başvurduğu nesnelere uygulanır.

Konu hakkında yeterli bilgiye sahip olmadan bu tür kategorik sonuçlara varmamalısınız. MQL'de sabit işaretçiler vardır ve bunlar C++ ile aynı şekilde bildirilir.

 
Alexey Navoykov :

Konu hakkında yeterli bilgiye sahip olmadan bu tür kategorik sonuçlara varmamalısınız. MQL'de sabit işaretçiler vardır ve bunlar C++ ile aynı şekilde bildirilir.

MQL5'te sabit bir işaretçi nasıl ilan edilir?!
 

Geliştiricilerin açıklamasını hatırladığım kadarıyla, constness hem nesne hem de işaretçi için geçerlidir.

Onlar. MQL'de const T* yazma === const T* const C++'da

Eskiden böyleydi, şimdi farklı olabilir ama bundan şüpheliyim.

 

Derleme Hatası

 template < typename T>
class A { public :
         bool operator ==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A< int > a;
};
template < typename T>
bool A:: operator ==( const A& )  { return false ; }
void OnStart ()
{
        A< int > a, b;
         Print ( a == b );
}
 

Derleme Hatası

 template < typename T>
class A { public : T t; };
class B { public :
template < typename T> void g(   T  * );
template < typename T> void f( A<T> * );
};
template < typename T> void B::g(   T  * ) {} //нормально
template < typename T> void B::f( A<T> * ) {} //ошибка: 'f' - member function already defined with different parameters
void OnStart ()
{
        A< int > a;
        B b;
        b.g( &a );
        b.f( &a );
}
 
A100 :

...

 template < typename T>
bool A:: operator ==( const A& )  { return false ; }

Şöyle olmalıydı:

 template < typename T>
bool A<T>:: operator ==( const A& )  { return false ; }
 
Alexey Navoykov :

Şöyle olmalıydı:

Yani C ++ ile uyumlu olurdu, diğer yandan - orada sadece B sınıfı "müdahale eder" - kaldırırsanız hatasız derler. Bu nedenle kontrol etmeyi amaçlamaktadır.
 

Derleme Hatası

 template < typename T>
class A {};
class B {
        void A() {}
         void f() { A(); } //error: 'A' - template mismatch
};
 

Derleme Hatası

 template < typename T> class A {};
template < typename T> class B {};
class C {
template < typename T>
         void f( B<A<T> > * ) {}
        B<A< int > > *b;
public :
         void g() { f( b ); } //error: 'f' - cannot to apply function template
};