Hatalar, hatalar, sorular - sayfa 2869

 
A100 :

Sözdizimsel olarak doğrulanmış bir hatanız var - parantez içinde (typename) ile çalışan bir kod örneği verin. Aynı başarı ile parantez içinde (OnStart) yazmak mümkün oldu

İşte bu, sözdizimi hatası yok

 typename (J)

Ve böylece, zaten bir sentez hatası olarak kabul ediliyor mu?

( typename )J

Teoride, tür dönüştürme ilkesi burada çalıştığında ve yardım her iki seçeneğe de izin verir.

 
Roman :

İşte bu, sözdizimi hatası yok

Ve böylece, zaten bir sentez hatası olarak kabul ediliyor mu?

Teoride, tür dönüştürme ilkesi burada çalıştığında ve yardım her iki seçeneğe de izin verir.

 template < typename T>

typename bir tür değil, bir anahtar kelimedir. Bu durumda, tür T'dir. Alım, anahtar kelimeye değil, türe gider

Felsefi gerekçelendirme burada uygun değildir. Her ne kadar MQL soyut bir dil olsaydı, o zaman muhtemelen anahtar kelimeye bir döküm yapmak mümkün olurdu ve hemen sıralamada 1. sıraya yerleşirdi.

 
A100 :

typename bir tür değil, bir anahtar kelimedir. Bu durumda, tür T'dir. Alım, anahtar kelimeye değil, türe gider

Felsefi gerekçelendirme burada uygun değildir. Her ne kadar MQL soyut bir dil olsaydı, o zaman muhtemelen anahtar kelimeye bir döküm yapmak mümkün olurdu ve hemen sıralamada 1. sıraya yerleşirdi.

bu tip adını anlıyorum   bir tür değil.
Ancak bu durumda, bir dönüşüm elde ederiz.
Sabitten, türünü alırız.
Belki bu doğru bir sözdizimi girişi değildir? Ama çalışıyor.

 #define  A '+'

typename (A)
 
Roman :

bu tip adını anlıyorum   bir tür değil.
Ancak bu durumda, bir dönüşüm elde ederiz.
Sabitten, türünü alırız.
Belki bu doğru bir sözdizimi girişi değildir? Ama çalışıyor.

Çalışır, ancak hayal ettiğiniz şekilde değil. Bir tür değil, bir dize alırsınız. Bunu bir örnekle göstermek istedim ama aşağıdaki hatayı aldım

Ancak bu, haklı olduğunuz anlamına gelmez - yanlışlıkla başka bir derleyici hatası ortaya çıktı

 
Derleme sırasında hata:
 void OnStart ()
{
    Print(typename("ushort"));      //(1) нормально
     Print ( typename ( typename ( '+' ))); //(2) Error: 'typename' - unexpected token
}

(1) ve (2) arasındaki fark nedir? Sevgili geliştiriciler - belki Roman haklıdır ve şimdi typename bir tür döndürür?

Beklenen sonuç: dize

 
A100 :

Çalışır, ancak hayal ettiğiniz şekilde değil. Bir tür değil, bir dize alırsınız. Bunu bir örnekle göstermek istedim ama şöyle bir hata aldım:

Nasıl bir tip değil?
Ben sadece türü alıyorum, dizeyi değil.
ushort bir dize değildir.

 #define   A '+'

void OnStart ()
{
   Print ( typename (A));
   Print ( typename ( "string" ));
}
 2020.10 . 09 01 : 45 : 54.402 TestScript (MNQZ20,M1)   ushort
2020.10 . 09 01 : 45 : 54.402 TestScript (MNQZ20,M1)   string
 
Roman :

Nasıl bir tip değil?
Ben sadece türü alıyorum, dizeyi değil.
ushort bir dize değildir.

Bizi kısaltmazsın, "kısa" alırsın. Fark açık mı? Değilse, anlayana kadar belgeleri okuyun.

Sonuç olarak gerçek bir ushort almak harika olurdu!

 
A100 :

Bizi kısaltmazsın, "kısa" alırsın. Fark açık mı? Değilse, anlayana kadar belgeleri okuyun.

Yani bu zaten Print() "ushort" dize değişmezi olarak yazdırır .
Bunun onunla ne alakası var? typename öğesinin tür adını döndürmesi gerçeği!

 
Roman :

Yani bu zaten Print() "ushort" dize değişmezi olarak yazdırır.
Bunun onunla ne alakası var? typename öğesinin tür adını döndürmesi gerçeği!

Bağlantıdaki belgeleri okudunuz mu? Orada da bir örnek var. Maalesef örneğim işe yaramadı.

 
A100 :

Bağlantıdaki belgeleri okudunuz mu?

Peki ya şablonlar?
Kullanım sözdizimi bir şablon için değilse, bu durumda.