Hatalar, hatalar, sorular - sayfa 2520

 

Ve hata yok

Это_новая_форма_комментария;
void OnStart () {}
 

Derleme sırasında hata

 void f() {} //Error: 'f' - function must have a body
void f();
void OnStart ()
{
        f();
}

Ve bu yüzden:

 void f() {}
void OnStart ()
{
        f();
}

iyi. Fark ne?

Ek olarak, C++'da tek geçişte normal olarak derlenir:

 #ifdef __cplusplus
void f( int ) {}   //была функция
//...
void f( int = 1 ); //уточнили параметры по умолчанию
void OnStart ()
{
        f();       / /вызвали
}
#endif
 
Ve hiçbir derleme hatası yok ... geriye kalan tek şey sonucu tahmin etmek:
 int f( int     ) { return 1 ; }
//...
int f( int = 2 );
int f( int     ) { return 3; }
void OnStart ()
{
         Print ( f( 0 ));
}
 

Derlerken garip uyarı

 //lib.mqh //объявления
void f(); //Warning: no #import declaration
 //lib.mq5 //реализация
void f() {}
 //Test1.mq5 //собираем все вместе
#include "lib.mqh"
#include "lib.mq5"
void OnStart () { f(); }

Ve bu yüzden:

 //Test2.mq5
void f();
void f() {}
void OnStart () { f(); }

her şey yolunda - uyarı yok. Fark ne?

 
A100 :

Derlerken garip uyarı

 //lib.mqh //объявления
int f(); //Warning: no #import declaration

//lib.mq5 //реализация
void f() {}
int türünde bir yazım hatası var, sanırım?
 
Alexey Navoykov :
int türünde bir yazım hatası var, sanırım?

Evet... boşlukta her yerde düzeltildi - basitlik için.

Öte yandan, bu da mantıklı, ancak zaten uyarı (*) net değil

 //lib.h //объявления
int g();   //Warning: no #import declaration //(*)
void f(); //Warning: no #import declaration
lib.h, bildirimler içeren ortak bir dosyadır ve gerektiğinde #include yoluyla dahil edilen lib.mq5, lib2.mq5, lib3.mq5... uygulamaları içeren dosyalardır. Bu nedenle, belirli bir derlemede int g() uygulaması hiç olmayabilir, ancak anlaşılmaz bir uyarı var. Aslında, yüzlerce var - ve gerçekten önemli uyarıları görmenizi engelliyorlar.
 
A100 :

Evet... boşlukta her yerde düzeltildi - basitlik için.

Öte yandan, bu da mantıklı, ancak zaten uyarı (*) net değil

lib.h, bildirimler içeren ortak bir dosyadır ve gerektiğinde #include yoluyla dahil edilen lib.mq5, lib2.mq5, lib3.mq5... uygulamaları içeren dosyalardır. Bu nedenle, belirli bir derlemede int g() uygulaması hiç olmayabilir, ancak anlaşılmaz bir uyarı var. Aslında, yüzlerce var - ve gerçekten önemli uyarıları görmenizi engelliyorlar.

Evet, rahatsız edici. Ayrıca uygulama aynı içerikte belirtilse bile uyarı da çıkacaktır.

 

Aşağıdaki hata özel ilgiyi hak ediyor:

 //lib1.mqh
void f(); //Error: 'f' - function must have a body
#include "lib.mq5"
//...
 //lib2.mqh
void f();
#include "lib.mq5"
//...
 //lib.mq5
void f() {}
 #include "lib1.mqh"
#include "lib2.mqh"
void OnStart ()
{
        f();
}

Esasen buna benzer, ancak birçok dosyanın varlığında oldukça açık değil ve anlaşılması zor

 
Söyle bana, bununla C ++ nasıl?
 struct A
{
   int i;
};

struct B : public A
{
   string Str;
};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = a; 
  a = b; // OK
}
Kodumda bu özelliği kullanıp kullanmayacağımı düşündüm. C++ ile çalışıyorsa kullanacağım. Hayır - pek, çünkü. sonraki yapılarda iptal edilebilir.
 
Başlatma uyarısı olmaması bir hata mı?
 struct A
{
   int i;
};

struct B : public A
{
   string Str;
};

void OnStart ()
{
  A a;
  B b;
  
//  b = a; // possible use of uninitialized variable 'a'
  a = b; // OK
}