Erreurs, bugs, questions - page 2565

 
Igor Makanu:

Si vous avez écrit une méthode/un champ statique ou appliqué un :: : - ne vous fiez pas au compilateur.

Les bugs arrivent. J'écris le code comme avant : this, : :, const, static, private, public, protected sont mis partout où c'est possible.

J'en ai besoin avant tout pour une compréhension rapide de mon code. Deuxièmement, je veux que le compilateur m'aide à écrire mon code. Cela m'aide beaucoup.


Hier, j'ai été confronté à une telle situation pour la première fois. J'ai écrit un code de 5Kb dont une partie a été copiée et collée à partir de divers fragments. Et lors de la première compilation, il n'y a pas eu une seule erreur ou avertissement. J'ai été surpris.

 
Igor Makanu:

J'ai décidé de décrire le problème dont nous discutons.

//+------------------------------------------------------------------+
class A
{
private:
   int               count;
public:
                     A():count(0) {}
   static void       inc()        { count++; } // Здесь ошибка, о которой компилятор сейчас не сообщает.

};
 
Igor Makanu:

J'ai décidé de décrire le problème dont nous discutons. D'ailleurs, le comportement de MQL ressemble de plus en plus à celui de C#, le code ne compile pas...

la méthode inc() - elle fonctionne avec les champs protégés

si j'ajoute un modificateur statique, où le compilateur doit-il arrêter de vérifier? j'ai décidé que j'avais besoin d'un point d'entrée vers un objet hors de la portée, n'est-ce pas ?

Votre variable de comptage n'est pas statique.

Comment une fonction statique peut-elle savoir à quel objet appartient cette variable ?

 
Koldun Zloy:

Votre nombre de variables n'est pas statique.

Comment une fonction statique saura-t-elle à quel objet appartient cette variable ?

pas un principe, je veux dire que toute implémentation du travail avec des méthodes statiques n'aura pas un contrôle complet par le compilateur, et l'entière responsabilité du contrôle incombe au programmeur

ok, laisse tomber, parce que ça n'a pas d'importance - j'ai écrit la même chose deux fois en un jourhttps://www.mql5.com/ru/forum/1111/page2564#comment_13249284

 
Igor Makanu:

Je veux dire que toute mise en œuvre de méthodes statiques ne sera pas entièrement validée par le compilateur, et que toute la responsabilité du contrôle incombe au programmeur

Où avez-vous lu ça ?

L'avez-vous inventé vous-même et l'avez-vous répété sans vous arrêter ?

 
Andrey Barinov:

Où avez-vous lu ça ?

Tu l'as inventé toi-même et tu le répètes sans cesse ?

Je ne l'ai pas inventé, c'est mon opinion... comme, en principe, pour clore tout travail avec les statiques uniquement au sein des statiques comme en C# - alors il n'y aura pas de questions ou d'erreurs ;)

 
Slava:

Quelques questions sur la plateforme :

1. une fourchette de négociation autorisée sera-t-elle ajoutée pour les VP via MOEX (par exemple EURRUB_TOM) ? Pour l'instant, il est impossible de savoir avec certitude si une limite sera fixée, car il n'y a pas d'accès à la fourchette (prix maximum et minimum possibles). Veuillez ajouter.

2. Est-il possible d'ajouter au terminal et au méta-éditeur un état de sauvegarde automatique toutes les N minutes ? Très insuffisant, car en cas de déconnexion soudaine, on revient à l'état du début du programme avec perte de tous les changements ! Très stressant !

 

MQ, vous êtes d'accord avec le stockage ? Il faut 10 à 20 secondes pour valider un fichier. Avant, c'était instantané...

Ajouté : parfois le commit se bloque...

 
Dans l'indicateur sur le graphique avec l'outil personnalisé, l'appel de la fonction CopyBuffer(avec le handle du masque habituel pour les symboles réels, par exemple pour EURUSD) renvoie l'erreur 4806. Le symbole personnalisé est basé sur la formule XAUUSD/31.1035*USDRUB. Le même indicateur personnalisé avec les mêmes paramètres fonctionne bien sur un graphique réel (comme XAUUSD, GBPUSD etc.). Quel pourrait être le problème ?
 
Slava:

Avec ce moulage, il n'y a pas de perte de données. Soit il est égal à 0, soit il n'est pas égal à 0.

Un autre cas est celui où double -> tout type d'entier (jusqu'à et y compris int32)

Vous jouez un peu trop avec les avertissements à mon avis, il y a un manque de cohérence dans votre jugement.

bool continuation()const {return this.last_level;}  // uint last_level
// expression not boolean	lrp_last_9.mq5	260	42