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

 

Противоречие:

struct X {
    X() : i( 1 ) {}
    const int i;
};
void OnStart()
{
    X x1[1] = {};    //(1) нормально ???
    X x2[1];
    ZeroMemory( x2 );//(2) Error: 'x2' - not allowed for objects with protected members or inheritance
}

А какая принципиальная разница между (1) и (2) ?

 
A100 #:

Противоречие:

А какая принципиальная разница между (1) и (2) ?

1 - инициализация при объявлении, 2 - (в общем случае) изменение.

 
JRandomTrader #:

1 - инициализация при объявлении, 2 - (в общем случае) изменение.

Если x1[0].i может быть равным нулю, то почему x2[0].i не может? Чем он хуже?

Вот Вам упрощенный пример противоречия:

void OnStart()
{
    X x1[1] = {};    //(1) нормально ???
    X x3 = { 0 };    //(3) Error: 'x3' - cannot be initialized with initializer list
}
 
A100 #:

Вот Вам упрощенный пример противоречия:

И еще один:

void OnStart()
{
    X x1[1] = {};    //(1) нормально ???
    X x2[1];
    Print( x1[0].i == x2[0].i );
}

Результат: false

при том, что:

 
Ошибка: программа непонятно как посчитала сделку, совершенную в рублях 365₽->338₽ (40 акций) и вместо -1020₽ показала убыток в 148$.
Если кто-то знает, подскажите что можно сделать
Файлы:
 

Прошу помощи экспертов :

struct Y
  {
   int               i;
                     Y(const Y & p): i(p.i) {}
  };

void OnStart()
{
  Y y(y);               // UB?
}

Это UB или что?

 
Ошибка при компиляции (Internal compiler error)
union X {
    struct XX {char i;} s;
    int i;
} x[1] = {};
void OnStart() {}
5ая с {}
 
mktr8591 #:

Это UB или что?

Это недоработка компилятора - теоретически должна быть ошибка еще на этапе компиляции, потому что в MQL

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2020.09.30 16:54

Тогда это противоречит Вашей же концепции, что переменная считается объявленной с момента завершения объявления. Зачем тогда ее придумываеть вообще было? Если в одном случае так, а в другом - по другому

если переписать OnStart так:

void OnStart()
{
  Y y = y; //Error: 'y' - undeclared identifier
}
то компилятор реагирует в соответствии с теорией
 
A100 #:

Это недоработка компилятора - теоретически должна быть ошибка еще на этапе компиляции, потому что в MQL

если переписать OnStart так:

то компилятор реагирует в соответствии с теорией

Точно.

Спасибо!

 

Кто-нибудь разобрался, как с помощью стандартной библиотеки можно повысить приоритет панели?

Код взял из примера отсюда.

На анимации видно, если создать панель, а потом трендовую линию и завести ее под кнопку, то нажатия на кнопку ловят события кликов для линии. Кнопка игнорируется.

Пробовал для кнопки выставлять приоритет таким образом:  m_button3.ZOrder(100) - но это не помогает.

Есть также метод CWnd::BringToTop(), который задавал для всей панели и отдельно для кнопки. Но не совсем понятно, как он должен работать, как правильно вызывать и устанавливать этот приоритет. Распринтовка при вызове этого метода показывает, что m_id всегда равен -1, хотя это ID объекта, судя по комментарию, но m_name, вроде, показывает, что объект задействован.


Если у кого-то есть решение, подскажите куда копать.