Errores, fallos, preguntas - página 1034
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
De hecho, tiene sentido, porque lo que está escrito parece un poco delirante.
C++ no lo considera así.
Sí, C++ no cuenta muchas cosas, pero la cuestión es que la inicialización de los miembros estáticos probablemente no sea en el orden en que se inicializan, sino en el orden en que se declaran.
Tendré que leer la norma sobre este tema.
https://www.mql5.com/ru/docs/basis/variables/initialization
Lo hice demasiado fácil - no moví const - como puedes ver ahora todo está claro - una constante es inicializada por otra:
El compilador indica como error que el miembro s1 está protegido. Si sustituimos protected por public, todo funciona como un reloj. Pero el hecho de estar protegido no tiene nada que ver con el orden de inicialización o de asignación, ni con la posibilidad de inicializar con un valor determinado
Tendré que leer la norma sobre esto.
Estoy de acuerdo, en general el compilador no es lo mismo que el compilador y hay que solucionarlo.
He aquí otro ejemplo
El compilador MQL aquí no quiere inicializar el array con el valor const int (enum - pasa)
De nuevo apelo al hecho de que C++ lo copia e inicializa correctamente.
Probablemente un error en la secuencia de llamada
En C++, el orden de evaluación de los operandos de una expresión es UB. ¿Por qué te basas en un orden específico aquí?
se emitió como "palabra Hola" ?
Esto es lo que ocurre en este caso para un operador sobrecargado para el tipo int, mientras que para el tipo string todo sale normalmente.
Además, no tiene nada que ver con C++. Suponga que escribe en su código
Y estas funciones se ejecutan en orden inverso o en absoluto para diferentes tipos de argumentos - en cualquier orden¡Saludos!
Ayúdenme a arreglar el acceso al puntero inválido.
En OnInit() tenemos:
SymbolsCollection = new CSymbolsCollection(); SymbolsCollection.RefreshRealSymbols();
El métodoCSymbolsCollection::RefreshRealSymbols() tiene una llamadaCleanSymbolsArray(myRealSymbols);
Estos métodos y variables se declaran en la clase como:
El problema es queRefreshRealSymbols() se ejecuta normalmente si se llama en el constructorCSymbolsCollection.
Sin embargo, llamar a SymbolsCollection.RefreshRealSymbols(); en OnInit(); da como resultado:
El error apunta a la línea CleanSymbolsArray(myRealSymbols); en el cuerpo del método CSymbolsCollection::RefreshRealSymbols(), la posición es justo después del paréntesis de apertura.
¿Alguna idea?
...
¿Alguna idea?