Ошибки, баги, вопросы - страница 3061

 
Ошибка при компиляции
/**/ \ //Error: '\' - illegal escape sequence
void OnStart() {}
 
A100:
Ошибка при компиляции
Так а что там делает символ \  после закрытия комментария?
 
Aliaksandr Hryshyn:
Так а что там делает символ \  после закрытия комментария?

Это специальный символ переноса и он должен игнорироваться в данном случае, ошибка не критичная (в исправление с низким приоритетом)

 

Тут компилятор должен ошибку выдавать:

class A
  {
public:
   int               aa;
  };
A a;

void OnStart()
  {
   a.aa=999999;
   A b=GetPointer(a);//Переменная b не является указателем
   Print(b.aa);
  }

Скрипт принтует девятки.

 
Aliaksandr Hryshyn:

Тут компилятор должен ошибку выдавать:

Скрипт принтует девятки.

А раз так, то работает неявное приведение указателяссылки к объекту

В C++ это выглядело бы так:


#ifdef __cplusplus
#define GetPointer(a)   ((A&)(a))
void OnStart()
{
   a.aa=999999;
   A b = GetPointer(b);
   Print(b.aa);
}
#endif
 
A100 :

А раз так, то работает неявное приведение  указателя ссылки к объекту

В C++ это выглядело бы так:

Поскольку вы очень хорошо разбираетесь в ООП. Могу я узнать ваше мнение по этому поводу?

Bug: Const method + Copy constructor
Bug: Const method + Copy constructor
  • 2021.07.18
  • www.mql5.com
This code reproduces the bug: There are 2 workarounds for this code, you either remove the const qualifier from the method foo or create a temporar...
 
fxsaber:

На удаленной машине такое стало только после какого-то времени. До этого все работало правильно. Не могу вспомнить, чтобы что-то менял в ОС.

Я помню нечто подобное. Возможно, с подключением по РДП связано.

И, кажется, помогало переключение по окнам с помощью Alt+Tab.

 
Andrey Khatimlianskii:

Я помню нечто подобное. Возможно, с подключением по РДП связано.

И, кажется, помогало переключение по окнам с помощью Alt+Tab.

К сожалению, не помогло. Пока не закрою Алерт, терминал так и не видно.

 
Alain Verleyen:

Поскольку вы очень хорошо разбираетесь в ООП. Могу я узнать ваше мнение по этому поводу?

В C++ все компилируется без ошибок, в MQL без const (3) - тоже компилируется - значит где то в MQL ошибка

class C {
public:
    C()           { Print( 1 ); }  
    C( const C& ) { Print( 2 ); }
    C h()         { Print( 3 ); return C(); }    //(3) нормально
    C f() const   { Print( 4 ); return C(); }    //(4) ошибка при компиляции
    C g() const   { Print( 5 ); C c; return c; } //(5) замена (4)
};
void OnStart()
{
    C c;
    c.f();
}

С другой стороны - даже если бы (4) и компилировалось бы, то все равно разная последовательность вызовов была бы:

в MQL: 1-4-1-2

в С++:  1-4-1

поэтому правильнее использовать вариант (5) в любом случае

 
A100 :

В C++ все компилируется без ошибок, в MQL без const (3) - тоже компилируется - значит где то в MQL ошибка

С другой стороны - даже если бы (4) и компилировалось бы, то все равно разная последовательность вызовов была бы:

в MQL: 1-4-1-2

в С++:  1-4-1

поэтому правильнее использовать вариант (5) в любом случае

Спасибо :-)