Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1097

 
Seric29:

Un pointeur vers une fonction est passé comme paramètre. Je vois que personne n'a trouvé comment faire cela avec les classes. Je ne comprends toujours pas pourquoi un pointeur vers une classe devrait être renvoyé.

Voici des échantillons intéressants mais qui ne sont pas pertinents pour ma question.

J'ai également vu quelque chose de similaire dans le guide, mais j'ai déjà fermé ces sites parce que mes mains me font mal et que j'ai du travail à faire.

Pourquoi devrais-je jouer avec une tâche aussi simple ? Vous pouvez simplement obtenir les données nécessaires par le biais d'un objet de classe

Je connais bien les références, les pointeurs et les pointeurs de fonction, mais je les utilise rarement dans la pratique. Et en général, je pense qu'ils ne sont nécessaires que pour économiser de la mémoire - et les conseillers experts avec les indicateurs ne sont pas des jeux, donc nous pouvons gérer avec des variables communes et des objets de classe dans laportée globale.

 
Alexandr Sokolov:

Pourquoi se donner tant de mal pour une tâche aussi simple ? Vous pouvez simplement obtenir les données requises par le biais d'un objet de classe

Je connais bien les références, les pointeurs et les pointeurs vers des fonctions, mais je les utilise rarement. À mon avis, ils ne sont nécessaires que pour économiser de la mémoire, les conseillers experts avec des indicateurs ne sont pas des jeux, donc, nous pouvons utiliser des variables ordinaires et des objets de classe dans la portée globale.

Je ne veux pas faire de fantaisie sur une tâche simple, et bien sûr, je modifie mes programmes où la fonction était appelée avant, j'écris une expression arithmétique pour simplifier les calculs ou passer à une fonction surchargée simplifiée, donc je veux traduire le programme en classes. Mais comme vous l'avez écrit ci-dessus et rarement les utiliser, et maintenant la question est des classes sont là, mais la création de pointeurs vers les fonctions de cette classe est impossible, pourquoi ce genre de programmation est nécessaire, si vous faites un vous ne pouvez pas faire l'autre, ce n'est pas la programmation, mais le diable sait quoi.

 
Seric29:

Je ne veux pas faire de fantaisie pour une tâche simple, et bien sûr je refais mes programmes où auparavant une fonction était appelée, j'écris une expression arithmétique pour simplifier les calculs ou passer à une fonction surchargée simplifiée, donc je veux traduire le programme en classes. Mais comme vous l'avez écrit plus haut et les utiliser rarement, et maintenant la question est les classes sont là mais créer des pointeurs vers les fonctions de cette classe est impossible, pourquoi ce genre de programmation est nécessaire, si vous faites l'un vous ne pouvez pas faire l'autre, ce n'est pas de la programmation mais le diable sait quoi.

Une classe est un modèle d'un objet, et pour utiliser la fonctionnalité qui est dans ce modèle - vous devez d'abord créer un objet.

En substance, le nom de la classe agit comme un type de données, comme int, double, string, etc., mais avec des fonctionnalités étendues. Vous ne pouvez pas déclarer une variable sans spécifier son type.

Et en plus, vous pouvez simplement détacher la fonction de la classe et elle peut être utilisée dans la classe et séparément de la classe sans créer d'objet.

 

Y a-t-il une autre raison pour laquelle l'indicateur ne fonctionne pas, si ce n'est que son fichier a été supprimé du dossier approprié ? (l'indicateur est compilé et fonctionne dans un terminal, mais pas dans un autre)


 
Alexandr Sokolov:

La classe est un modèle d'un certain objet, et pour utiliser la fonctionnalité qui est dans ce modèle - vous devez d'abord créer un objet.

En fait, le nom de la classe agit comme un type de données, comme int, double, string, etc., mais avec des fonctionnalités étendues. Vous ne pouvez pas déclarer une variable sans spécifier son type.

Et en plus, vous pouvez simplement détacher la fonction de la classe et elle peut être utilisée dans la classe et séparément de la classe sans créer d'objet.

A moins que. Eh bien, c'est juste que les classes sont un sujet compliqué, et le livre de référence est plein d'exemples sur le transfert, sur la création de liens et de pointeurs, je pense que c'est possible (au moins en c++ c'est possible mais mql4 n'a rien à voir avec le c++), il faut comprendre comment ça marche. L'aide a montré ces exemples, ils sont très compliqués et surchargés, au lieu de prendre une classe et de montrer un exemple simple, ils l'ont surchargé de calculs et d'informations supplémentaires et je ne peux pas comprendre ce qu'ils veulent dire, j'ai fermé tous ces liens à cause de la fatigue et de l'épuisement. Ok, donc je vais juste tirer des fonctions de la classe.

 
Alexandr Sokolov:

Y a-t-il une autre raison pour laquelle l'indicateur ne fonctionne pas, si ce n'est que son fichier a été supprimé du dossier approprié ? (l'indicateur est compilé et fonctionne dans un terminal mais pas dans un autre)


Sur le marché ?

 
Alexandr Sokolov:

Y a-t-il une autre raison pour laquelle l'indicateur ne fonctionne pas, si ce n'est que son fichier a été supprimé du dossier approprié ? (l'indicateur est compilé et fonctionne dans un terminal, mais ne fonctionne pas dans un autre)


voir les messages dans les journaux du terminal et de l'Expert Advisor

votre capture d'écran montre seulement que cet indicateur n'a pas de code source

 
Alexandr Sokolov:

Y a-t-il une autre raison pour laquelle l'indicateur ne fonctionne pas, si ce n'est que son fichier a été supprimé du dossier approprié ? (l'indicateur est compilé et fonctionne dans un terminal, mais pas dans un autre)


Il a peut-être besoin de bibliothèques supplémentaires
 
Сергей Таболин:

Sur le marché ?

Non

Igor Makanu:

voir les messages dans le terminal et les journaux d'Expert Advisor

Votre capture d'écran montre seulement que cet indicateur n'a pas de source.

Merci.

MakarFX:
Peut-être a-t-il besoin de bibliothèques supplémentaires

Exactement non, je l'ai écrit - je le saurais.

 

Veuillez me dire pourquoi le compilateur génère un avertissement dans le code du script de test MQL4 suivant :

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Un avertissement à la ligne 27 sur la non-concordance des types de données. Les deux variables ont le même type int. Vous trouverez ci-dessous une capture d'écran de la compilation du script.

Si je remplace la ligne 27 par

sig[j+1].age=(int)t;

l'avertissement n'apparaît pas.

Quelle est l'astuce ?