Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
MqlRates mrate[];//массив нулевого размера
Utilisez ArrayResize et ArrayInitialize.
Cette structure est généralement utilisée avec les CopyRates.
Renat a dit que c'était mieux de faire comme ça :
Essayons d'y voir clair. Autant que je me souvienne, Renat parlait de l'initialisation d'une simple variable, pas d'un tableau. Avec des batailles, des exemples similaires sont apparus dans le manuel :
Vous, par contre, essayez d'initialiser un tableau, et non une simple variable, en le déclarant. J'ai trouvé cet exemple dans le manuel :
Le tableau est ici initialisé avec un nombre fini de valeurs, et l'explication dit que le compilateur détermine la taille d'un tel tableau en se basant sur le nombre de ces valeurs. Je suis trop paresseux pour le vérifier - la taille du tableau f[] de l'exemple est très probablement de 6.
Dans votre échantillon, la taille de la séquence d'initialisation {0} est de 1. Par conséquent, le compilateur définira très probablement la taille du tableau mrate[] comme étant 1. Ici, par souci d'intérêt, spécifiez-le de cette façon :
Cela provoquera-t-il une erreur ?J'étais confus. Swan l'a expliqué clairement. J'ai pris la mauvaise structure. Il n'a pas besoin d'être initialisé du tout car il prend des valeurs. Vous devez initialiser ceux qui donnent leurs valeurs. J'avais tort.
Eh bien, c'est le principal. La question sur Renate était intéressante en soi, alors j'ai aussi compris quelque chose.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 } ; pas un tableau dynamique.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 } ; tableau non-dynamique.
Le double f[] est un tableau dynamique en soi. C'est ce tableau qui est déclaré lors de la création. Je n'ai pas analysé si elle cessera d'être dynamique après l'avoir initialisée avec la séquence d'initialisation finie. La principale chose que vous avez découverte ci-dessus est que le tableau déclaré acquiert une taille particulière après l'initialisation.
Voulez-vous dire que le tableau dynamique résultant d'une initialisation explicite cesse d'être dynamique, c'est-à-dire qu'il perd son statut et ses propriétés dynamiques ? - Peut-être, mais j'en doute. Question : pour quelle raison un tableau dynamique double f[] cesse-t-il d'être un tableau dynamique ?
Le double f[] est lui-même un tableau dynamique. Elle est déclarée à la création. Je n'ai pas cherché à savoir si elle cesse d'être dynamique après l'initialisation par la séquence d'initialisation finale. La principale chose que vous avez découverte ci-dessus est que le tableau déclaré acquiert une taille particulière après l'initialisation.
Voulez-vous dire que le tableau dynamique résultant d'une initialisation explicite cesse d'être dynamique, c'est-à-dire qu'il perd son statut et ses propriétés dynamiques ? - Peut-être. Alors la question est : pourquoi ?
Le fait est que nous, en MKL, sommes un peu "isolés" du monde réel ;)), le compilateur décide pour nous dans une telle situation. Si elle le voit :
crée un tableau statique (sans possibilité de le redimensionner). Si elle le voit :
double f[];
crée la structure struct MqlArrayObject (elle se comporte comme un tableau dynamique), dans la mémoire globale. Par conséquent, vous ne pouvez pas initialiser un tableau après la déclaration (double f[] ; f = {6} ;)
P.S. : tout ce qui est écrit est mon IMHO, je peux me tromper quelque part.
Question d'un imbécile : Est-il vrai que si le compilateur voit la chaîne de caractères
il créera initialement un tableau statique au lieu d'un tableau dynamique ?
Il existe une règle :"Lors de la déclaration d'un tableau dynamique (un tableau avec une valeur non spécifiée dans la première paire de crochets), le compilateur crée automatiquement une variable struct MqlArrayObject(un objet de tableau dynamique) et fournit du code pour une initialisation correcte. Ou la présence de la séquence d'initialisation finale équivaut-elle à "spécifier explicitement toutes les dimensions significatives du tableau" et conduit-elle à la création d'un tableau statique ?
Question d'un imbécile : Est-il vrai que si le compilateur voit la chaîne de caractères
il créera initialement un tableau statique au lieu d'un tableau dynamique ?
Il existe une règle :"Lors de la déclaration d'un tableau dynamique (un tableau avec une valeur non spécifiée dans la première paire de crochets), le compilateur crée automatiquement une variable struct MqlArrayObject(un objet de tableau dynamique) et fournit du code pour une initialisation correcte. Ou la présence de la séquence d'initialisation finale équivaut-elle à "spécifier explicitement toutes les dimensions significatives du tableau" et conduit-elle à la création d'un tableau statique ?
Est-il faible de le vérifier ?
;)
Vous ne pouvez pas vérifier ?
;)
Pour le moment, c'est faible. Je n'arriverai pas au terminal avant ce soir. Sinon ma réponse à 220Volt aurait été différente, comme vous le comprenez :) Je n'ai pas trouvé l'information dans le manuel. Peut-être que je ne cherchais pas assez, mais j'étais méticuleux.
OK, je suis sorti du terminal. :) Je suis également à l'extérieur du terminal.
Élémentaire vérifié - j'essaie d'utiliser ArrayResize(...)