Errori, bug, domande - pagina 1354

 

Signori, che ne direste di migliorare significativamente l'usabilità del linguaggio aggiungendo laproprietà: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

Il continuo ballare con setter, getter e parentesi è molto fastidioso.

 
Alexey Navoykov:

Signori, che ne direste di migliorare significativamente l'usabilità del linguaggio aggiungendo laproprietà: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

Il continuo ballare con setter, getter e parentesi è molto fastidioso.

Alexey, sono d'accordo, ma dovremmo fare una votazione, non qui. Ecco alcune stampelle, non ho provato in MQL http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Alexey, sono d'accordo, ma dovremmo fare una votazione, non qui. Ci sono alcune stampelle qui, non ho provato in MQL http://rsdn.ru/article/vcpp/props.xml

C'è qualcosa di sbagliato nella codifica del tuo link, mostra sempre il testo rosso. Ma so cosa intendi, ho letto di queste stampelle prima. Non è possibile implementarlo in MQL al momento, perché l'overloading dell'operatore fantasma non è supportato.Ma questa caratteristica nativa in VS è molto utile, specialmente quando è racchiusa in una macro, e non consuma alcuna risorsa aggiuntiva. Quindi, è giunto il momento di implementare le proprietà anche in MQL, perché tutto sembra goffo senza di esse.

 
Alexey Volchanskiy:

L'ho capito, ho trovato un bug nel compilatore MQL4. Sono stato disattento e mi ci sono voluti 2 giorni per trovarlo. L'essenza del problema è questa: sto per citare un semplice codice. Non ottengo un errore di compilazione o di warping, ma un errore di runtime.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Non c'è bisogno di alcun errore qui. Qui c'è una chiara conversione di tipo. Sarebbe così in VS

  double ptest = (double)(int)(test);
Che differenza farebbe?
 
A100:
Non c'è bisogno di alcun errore qui. Qui c'è una conversione esplicita del tipo.
Non si può lanciare una classe a un tipo significativo, anche esplicitamente. C'è sicuramente un errore.
 
Per favore, ricordatemi come ordinare i simboli nella finestra di panoramica del mercato (MT4, MT5). Su un terminale sono ben ordinati, sull'altro sono un casino. L'ho risolto molto tempo fa - non ricordo come ho fatto. Non c'è niente nella documentazione al riguardo, tranne che per trascinare i simboli uno per uno in un nuovo posto. Ma non l'ho fatto esattamente - è possibile ordinare l'intera lista manualmente. :-/
 
Vasiliy Sokolov:
Non si può lanciare una classe a un tipo significativo, anche esplicitamente. È sicuramente un errore.

Non è una classe, è un puntatore, e un puntatore è un numero.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

C++ si compila senza errori

Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovete distinguere i vostri errori da quelli del compilatore.

 
A100:

Non è una classe, è un puntatore, e un puntatore è un numero - impara la matematica.

C++ si compila senza errori

Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovreste distinguere i vostri errori da quelli del compilatore.

Non c'è nessun puntatore lì, perché i puntatori non esistono in MQL4/5. Ci sono delle maniglie.

----------------------

Ho ricevuto una risposta dal Service Desk

Squadra di supporto 2015.08.24 09:44
Grazie per il post, lo sistemerò.
Infatti, ci deve essere un errore di compilazione qui.


Squadra di supporto 2015.08.24 14:39

Stato: Aperto Chiuso
Grazie per il post, risolto. Il compilatore darà ora un errore di compilazione.
 
Alexey Volchanskiy:

Non c'è nessun puntatore lì, perché non ci sono puntatori in MQL4/5. Ci sono descrittori.

Un descrittore è ancora un numero specifico. Il fatto che questo numero non punti a una posizione di memoria specifica non lo priva delle proprietà di un numero.
 
A100:
Un descrittore è ancora un numero specifico
Naturalmente, in termini di "come viene immagazzinato nella memoria", hai ragione.
Ma non ha senso convertire un descrittore in un numero o viceversa, ed è molto probabilmente un bug nel codice.
Nel prossimo futuro, se una dichiarazione di conversione appropriata è sovraccaricata nella classe, sarà chiamata.