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

 

На печать ничего не выводится

string g( string str = __FUNCTION__ ) { return ( str ); }
void OnStart()
{
        Print( g() );
}

А почему?

 
marketeer:
В общем, продолжение исследования дало такие результаты. При наведении курсора мыши на тикеры в обзоре рынка всплывает тултип, в котором для серых символов написано Trade: No. А вот для российских CFD, которые выводятся черным цветом, выводится Trade: Close (еще раз обращаю внимание, что время - торговое и тики по символу в этот момент приходят). Из чего я делаю вывод, что брокер имеет несколько уровней запрета торговли, из них лишь некоторые (или даже только один) помечаются серым цветом, а все остальные свалены в общую кучу с действующими символами, так как отображаются черным.

Close Only в торговом типе означает разрешение только на закрытие существующих позиции. Поэтому он показан активным черным цветом.

Режимы работы настраиваются на торговом сервере.

 
Renat:

Close Only в торговом типе означает разрешение только на закрытие существующих позиции. Поэтому он показан активным черным цветом.

Режимы работы настраиваются на торговом сервере.

Написано то не "Close only", а именно "Close". Это ошибка или какие-то еще нюансы остаются невыясненными?
 
marketeer:
Написано то не "Close only", а именно "Close". Это ошибка или какие-то еще нюансы остаются невыясненными?
Close тут означает Close Only. Пишется просто укороченно.
 
class object_line : public CObject
{
public:
   static color line_color_befor;
};
static extern color object_line::line_color_befor = clrGreen;

void OnChartEvent(const int id,                            
                  const long& lparam,   
                  const double& dparam, 
                  const string& sparam){
   if (id == CHARTEVENT_OBJECT_CREATE)   
      Alert(object_line::line_color_befor);   
} 

1. Компилируется

2. При создании объекта алерт - clrBlack

3. Проверял на 4-ке 670 билд 

 
A100:

На печать ничего не выводится

А почему?

Спасибо за сообщение.
Нельзя использовать макросы __FUNCTION__ и __FUNCSIG__ вне тела функции.

Добавлена новая ошибка компиляции: 377 "macro cannot appear outside of a function body"
 
ALXIMIKS:

1. Компилируется

2. При создании объекта алерт - clrBlack

3. Проверял на 4-ке 670 билд 

Спасибо за сообщение. Ошибка в компиляторе исправлена, Ваш код будет компилироваться с ошибкой:
'line_color_befor' - redefinition; different type modifiers
Используйте следующий код для обхода данной ошибки:
#include <object.mqh>

class object_line : public CObject
{
public:
   static color line_color_befor;
};

color input line_color_param=clrGreen;//object_line::line_color_befor

static color object_line::line_color_befor = line_color_param;

void OnChartEvent(const int id,                            
                  const long& lparam,   
                  const double& dparam, 
                  const string& sparam){
   if (id == CHARTEVENT_OBJECT_CREATE)   
      Alert(object_line::line_color_befor);   
} 
 
A100:

Ошибка при выполнении: incorrect casting of pointers (build 977, но и раньше такая периодически возникала)

Если что-то передвинуть (в примеру поменять местами объявления #import) или вместо 3-х сделать 2 файла, или убрать вызов h() - то вместо указанной - возникают уже другие ошибки

Если код выше перекомпоновать, то в конечном счете вызывается R::y, а должна вызываться L::y

 В более сложном варианте некоторые обычные функции из модулей сами (видимо другими конструкторами) вызываются до (!) статических конструкторов (как если бы в приведенном выше примере f() вызывалась бы до X::X, который в свою очередь правильно вызывается до OnStart). Пример постараюсь привести, но там громадные файлы. Но иногда работает правильно, значит ошибка не у меня, поскольку порядок создания объектов определяется самим компилятором и я не могу на него повлиять

Спасибо за сообщение Проблема есть, разбираемся.

UPD: Исправлено.
 
mql5:
Спасибо за сообщение Проблема есть, разбираемся.

UPD: Исправлено.

Я там https://www.mql5.com/ru/forum/1111/page1221#comment_1070267 ошибся, не указал, что функции виртуальные - если теперь объявить R и L так:

class R { public:
        virtual void y( A* a ) const { PF       ((B *)a).g( 1 ); }
};
class L : public R { public:
        virtual void y( A* a )       { PF       ((B *)a).g( 2 ); }
};
то вызывается L::y, а должна вызываться R::y, потому что они разные - (отличаются на const, а указатель был на R)
 

Перестали работать терминалы всех брокеров, включая тот что скачал на этом сайте везде выдает вот это...

 

 

 

Перезапуск не помогает, перезагрузка и переустановка тоже, до этого все работало нормально, на комп ничего не устанавливал, на терминал тоже ничего не устанавливал. только покупки в маркете. 

Причина обращения: