Hatalar, hatalar, sorular - sayfa 1569

 
Ruslan Khasanov :
Şekillendiriciyi kullanırken neden "çöp" görünüyor?
Ve neden kullanıyorsun? ))
 

Derleme hatası (1327 derlemesi)

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

void OnStart ()
{
        A a;
         while ( a++ ); //'++' - illegal operation use
}
 

Derleme Hatası

 class A { public :
template < typename T>         void f( T t );
template < typename T> static void g( T t );
}; 
template < typename T> void A::f( T t ) {}
template < typename T> void A::g( T t ) {}

void OnStart ()
{
        A a;
        a.f(   1 ); //нормально
        A::g( 1 ); //'g<int>' - access to non-static member or function
}
 

Derleme Hatası

 class A { public :
        A * operator ++()      { return & this ; }
};
template < typename T> void f( T t ) {}
void g( A *a )
{
        f( ++a ); //'A' - declaration without type (1)
        f( a. operator ++()); //нормально            (2)
}
Özellikle şunu belirteceğim - (!) Satırları (1) ve (2) değiştirirseniz, o zaman her şey yolundadır, bu da ek doğrulama gerektirir
 
A100 :

Derleme Hatası

Özellikle not edeceğim - (!) Satırları (1) ve (2) değiştirirseniz, o zaman her şey yolundadır, bu da ek doğrulama gerektirir
Örneğinizde f(++a) ve f(a++) öğelerinin farklı f sürümlerine neden olduğunu doğru anlıyor muyum?
 
Anton Zverev :
Örneğinizde f(++a) ve f(a++) öğelerinin farklı f sürümlerine neden olduğunu doğru anlıyor muyum?

Hayır, bu bir derleme hatasıdır - yani (belirli çağrıların) yürütülmesine henüz ulaşmamıştır. Satır (1) ve (2) kod açısından eşdeğerdir (aynı şeyin farklı gösterimi)

Ayrıca bunun sadece ++ operatörü meselesi olduğu izlenimini almamanız için bir örnek vereceğim.

 class A { public :
        A * operator <<( int )      { return & this ; }
};
template < typename T> void f( T* t ) {}
void g( A* a )
{
        f( a << 1 ); //'A' - declaration without type
}
 
A100 :

Satır (1) ve (2) kod açısından eşdeğerdir (aynı şeyin farklı gösterimi)

++a ve a++ hala anlam bakımından farklıdır. Bulmaz mısın?
 
Anton Zverev :
++a ve a++ hala anlam bakımından farklıdır. Bulmaz mısın?
a++ yok
 

Derleyici hatası: ağaç optimizasyon hatası

 #property library

class A { public :
template < typename T> int f( T a, int b, bool c = false );
};
template < typename T>
int A::f( T a, int b, bool c ) { return 0 ; }

class B : public A {
         virtual void g();
};
void B::g()
{
        f( 0 , 0 , false ); //нормально
        f( 0 , 0 );         //tree optimization error
}

class C {};
void start( C* ) export {}

' Ağaç optimizasyon hatası ' yerelleştirilmesi zor kategorisine ait olduğundan, geliştiricilere (mümkünse) tüm optimizasyonu optimizasyon anahtarına koyma isteği (neyse ki var), aksi takdirde, optimizasyon devre dışı bırakılmış olsa bile, daha önce derleme güncellemesinden sonra çalışan programlar tamamen çalışmaz hale gelir (ve geri dönmek yasaktır).

Bugünün tüm hatalarının eski olmadığını, ancak yeni olduğunu not ediyorum - daha önce (1241 yapı) her şey işe yaradı
 
A100 :
a++ yok

Doğru. Bu nedenle belirtilen

Anton Zverev'in fotoğrafı.
Örneğinizde f(++a) ve f(a++) öğelerinin farklı f sürümlerine neden olduğunu doğru anlıyor muyum?