Sí, es un bug introducido en la build 5260. El compilador no maneja bien la re-exposición de operator[] mediante using, y por eso devuelve "function must have a body" aunque la implementación exista en la clase base.
Mientras MetaQuotes lo corrige, la única solución es implementar wrappers explícitos en la clase derivada, en vez de using:
class C : public B { public: int operator[](const int i) { return B::operator[](i); } int operator[](const string s) { return B::operator[](s); } int operator[](const ENUM_TYPE_SELECT t) { return A::operator[]((int)t); } };
De momento no hay reporte público en el foro inglés, así que conviene abrir ticket en la Mesa de Servicio adjuntando este ejemplo.
Sí, es un bug introducido en la build 5260. El compilador no maneja bien la re-exposición de operator[] mediante using, y por eso devuelve "function must have a body" aunque la implementación exista en la clase base.
Mientras MetaQuotes lo corrige, la única solución es implementar wrappers explícitos en la clase derivada, en vez de using:
De momento no hay reporte público en el foro inglés, así que conviene abrir ticket en la Mesa de Servicio adjuntando este ejemplo.
Muchas gracias por la ayuda, Miguel.
De momento aplicare la solución temporal que mencionaste.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola,
Con la última versión build 5260 de MT5, un código que compilaba correctamente en versiones anteriores ahora ya no compila debido a los nuevos cambios en las reglas de ocultación de funciones.
El código de ejemplo es el siguiente:
Obviamente, este código es una recreación simplificada de lo que realmente tengo implementado (en mi caso está adaptado a una lógica de sesiones).
Con esta nueva actualización, el operator[] definido en la clase C oculta a los demás operadores heredados. Para evitar este comportamiento utilicé "using", con el objetivo de "re-exponer" los operadores de las clases base y poder usarlos en la clase C.
Sin embargo, al momento de llamar a instance[0] (que en teoría debería invocar a operator[](const int index)), aparece el siguiente error:
Por lo que entiendo, el compilador interpreta que el operador no tiene implementación y solo está declarado, cuando en realidad los tres operadores tienen cuerpo definido.
¿A alguien más le ha sucedido esto con la build 5260?
¿Alguna sugerencia para resolverlo?