MQLArticles/MqlCompilerBugs/TemplateInNamespace/README.md
2026-09-02 10:54:12 -05:00

48 lines
2.2 KiB
Markdown

# Bug: Struct undefined
## Descripcion
Este bug consiste en qeu el compilador falla al intentar callear una fucnion template
de clase\struct definida fuera del cuerpo de dicha clase\struct todo esto dentro de un namespace.
Tengo una hipotesis que esto pasa, dado qeu cuando el compilador lee el calling a una
funcion template. en OnStart o en un scope global fuera del namespace, trata de instanciar
la funcion espeicia en base a los parmaeotrs del template DENTRO del escope actual
(global por ejemplo) y debido a eso al terminar el proceso (o quizas ahi) mismo
como digmoas la clase que tiene dicha funcion esta definida en un scope diferente
falla, dado que la instnacion de la funcion se dio en global pero la clase
define diha funcion dentro de un escope del namespace... esto es una hipotesis
probable, aunque sincemante no se como fuincionara el compilador de mql5 por dentro
dado qeu es cerrado no hay docs que profundizen de parte de mql5 como funciona su motor
al momento de parsear los templates.
Aparte algo a mencionar es que este bug no es neuvo ya lleva tiempo pero igual
lo dejare aqui como recuerdo
## Estado
- Build: 6140 (o menos incluso, no tengo la build exacta desde donde emepzo)
- Fecha exacta: 2026-09-02 (fehca que lo reporto, NO LA FECHA DONDE APARECIO)
- Error que reporta el Metaeditor: `Struct undefined`
## Reproducibilidad
En Repro.mq5 esta la forma de reproducirlo
## Solucion (puede aplicar a esta build o quizas se arregle asi que ya no sera necesario)
Lo que ha funcionado durante estos meses fue que cuando ocurren este tipos de erorres, la solcuion
es definir el body de la funcion DENTRO del cuerpo de la clase (NO FUERA)..
Esto por lo visto hace que el compilador logre pasearlo o algo asi.. por lo visto las funciones templates
ah de tener otro trato que las normales dado que son "on demand" al igual qeu todas, pero implican
un proceso de espeicliacion pro calling.
## Donde se encontro
- Repositorio: https://forge.mql5.io/nique_372/CryptoByLeo/src/branch/main/Src/Fernet/Main.mqh
- Commit exacto (hash): `30eb0eb0f44f1ce291980d995f97c244762e72b8`
- Archivo exacto: `GrapichsByLeo\General\EjeLine\Ejes.mqh`
- LOC: 87-88
- Link exacto: `https://forge.mql5.io/nique_372/CryptoByLeo/src/commit/30eb0eb0f44f1ce291980d995f97c244762e72b8`