Errores, fallos, preguntas - página 2328

 
Alexey Navoykov:
No estás prestando atención.

O tú. Vamos al grano.

 
A100:

Ofrecí la variante más sencilla que podría implementarse mañana (no en 10 años) y sería similar a C++ (de lo contrario, para qué cambiar nada). Además, si operator*() no está ni va a estar implementado (había información al respecto en el foro), no está claro por qué operator->() se implementaría de repente (son del mismo orden).

No se necesita de esta forma ni mañana ni dentro de 10 años. Y no necesitas similitudes externas, sino características.

Portar al menos parcialmente la STL de C++. No es sólo el operador-> lo que está en juego, necesitamos mucho más.

operador-> sería el primer paso hacia los punteros inteligentes.


 

De hecho, no todo está bien con el reparto implícito tal y como está ahora.

class A
{};

class B : public A
{};

void OnStart()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast<B*>(aa);
   Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print(ba2 ? "ba2 ok" : "ba2 bad cast");
}

Puedes ver que el reparto dinámico está incluido en el reparto implícito

PERO

En primer lugar, no sabemos por qué se incluye cuando el reparto dinámico está explícitamente presente en el lenguaje

en segundo lugar se incluye muy mal porque el error de cast dinámico en caso de función se puede controlar (salida de puntero malo) pero el cast implícito no! porque lanza una excepción incontrolable

2018.11.23 20:31:47.348 test (AUDNZD,M5) casting incorrecto de punteros en 'test.mq5' (17,11)

No tiene ningún efecto.

Tienes que dar un puntero inválido como función, o excluir el reparto dinámico del reparto implícito y dar un error de compilación.

 

Sí, con este problema, trabajar con POO es poco controlado y poco fiable. En algún lugar cambias el tipo en un sitio del programa, y luego explota en quién sabe dónde. En estos ejemplos, de alguna manera puedes salirte con la tuya usando muletas, porque hay una simple asignación de punteros, y todo está delante de ti. Pero en general, cuando un puntero se pasa a alguna función y dinámicamente hace un casting a algo desconocido, no tienes forma de controlarlo.

 
Alexey Navoykov:

Un punto es un operador universal en MQL.

Eso depende de cómo se mire. Se puede decir que es universal: funciona tanto con objetos como con punteros.

O puedes decir que . sólo funciona con objetos, y sólo funciona con punteros en la medida en que el puntero esté implícito en el objeto, es decir, en el caso de

class A {
public:
    void f() {}
} *a;

entrada

    a.f();

equivale a no

    a->f();

a

    (*a).f();
 

existe esta estructura

struct OrdersInfo
{
   int      ticket;
   string   symbol;
   int      type;
   double   volume;
   double   open_price;
   double   stop_loss;
   double   take_profit;
   string   comment;
   int      magic;
};

hay una variable OrdersInfo orden, cuando trato de escribirlo en un archivo

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

el compilador da: 'orden' - no se permiten estructuras que contengan objetos

¿Cuál puede ser el problema?


 
Andrii Djola:

existe esta estructura

hay una variable OrdersInfo orden, cuando trato de escribirlo en un archivo

el compilador da: 'orden' - no se permiten estructuras que contengan objetos

¿Cuál puede ser el problema?


Aquí

https://www.mql5.com/ru/docs/files/filewritestruct

enumera las restricciones.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
Gracias
 

MT4 en el tráfico de la UPU es negativo, el contador de la historia descargada comenzó a aumentar ...


 
Cuando vas a la página de productos de cualquier autor, no hay manera de saber qué productos son para la plataforma correcta (4 o 5). ¿Es posible dividir los productos de esta página por plataforma?
Razón de la queja: