в прошлом году работало не так - специально тестировал модификаторы const
и кажется @Ilyas объяснял как происходит запуск MQL-программы, сначала инициализируются все const и static вне зависимости от того где они описаны, затем уже конструкторы классов будут вызваны
Видно речь шла о глобальных переменных с модификаторами const/static, а вы используете локальные.
ошибка, что компилятор MQL разрешает использовать неоднозначные выражения , если есть модификатор const то это константа
этот же код компилятор не отследил? а другую ситуацию отследил
Шарп в VS2019 сразу еще до компиляции все подчеркнул
class A{
public:
int ivalue;
int inc()const {staticint v = 0; return(++v);}
A():ivalue(0){}
};
class B{
public:
int ivalue;
int inc(){return(++ivalue);}
B():ivalue(0){}
};
//+------------------------------------------------------------------+voidOnStart()
{
const A a;Print(a.inc());
B b1;
Print(b1.inc());
const B b2;Print(b2.inc()); // 'inc' - call non-const method for constant object
}
//+------------------------------------------------------------------+
Sergey Dzyublik:
Видно речь шла о глобальных переменных с модификаторами const/static, а вы используете локальные.
может быть и перепутал, но поведение модификатора const сильно отличается от C#
Возможно я не первый задаю этот вопрос. Писал в другую ветку, но ответа разработчиков не получил. Почему при реальной стоимости пункта на XAUUSD - 1USD
Функция SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); упорно показывает 0.1USD
И как при этом считать просадку, прибыль, и прочие вещи, в то время как на валютных парах показывает нормальную стоимость тика.
Возможно я не первый задаю этот вопрос. Писал в другую ветку, но ответа разработчиков не получил. Почему при реальной стоимости пункта на XAUUSD - 1USD
Функция SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); упорно показывает 0.1USD
И как при этом считать просадку, прибыль, и прочие вещи, в то время как на валютных парах показывает нормальную стоимость тика.
З.Ы. Терминал МТ5
Это Вы у своего брокера спрашивайте, эти данные заполняет брокер...
Баг MT5 (build 2366), ошибка компиляции при доступе к статическому методу класса, доступ к которому осуществляется через шаблонный тип аргумента функции.
template<typename _Tp>
struct It_g{
class Opt{
template<typename _It>
staticvoid test(_It &it){
_Tp p = it.p;
};
};
_Tp p;
};
template<typename _Tp>
class V{
public:
struct It : public It_g<_Tp>{};
It b;
};
template<typename T>
class GetStructType{
public:
struct type : public T{};
};
template<typename _It>
void test(_It &it){
GetStructType<_It>::type::Opt::test(it); // Ok
_It::Opt opt;
opt.test(it); // Ok
_It::Opt::test(it); // '_It' is not a class, struct or union | 'Opt' is not a class, struct or union
}
class ClassA{};
voidOnStart(){
V<int> v1;
test(v1.b);
V<ClassA*> v2;
test(v2.b);
V<int>::It it3;
test(it3);
V<ClassA*>::It it4;
test(it4);
}
Баг MT5 (build 2366), ошибка компиляции из-за некоректного использования пространства имен и области видимости в шаблонном конструкторе при вызове базового класса. Проблема возникает, когда используется одно и то же имя класса: в глобальном пространстве имен, в internal class и при наследовании в качестве базового класса.
В С++ все работает, если явно сослаться на глобальное пространство имен. С++ online: https://onlinegdb.com/BJIV6frUI В MQL этого сделать нельзя - Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса. (не исправлено MT5(build 2366))
Так же проблем в конструкторе при вызове базового класса касается представленный ранее баг - https://www.mql5.com/ru/forum/1111/page2680#comment_15546487 Прошу обратить внимание, что он "работает" как при использовании пространства имен, так и с internal классами.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
в прошлом году работало не так - специально тестировал модификаторы const
и кажется @Ilyas объяснял как происходит запуск MQL-программы, сначала инициализируются все const и static вне зависимости от того где они описаны, затем уже конструкторы классов будут вызваны
Видно речь шла о глобальных переменных с модификаторами const/static, а вы используете локальные.
Что конкретно Вы считаете ошибкой?
У меня VS2019 не выдаёт никаких ошибок.
ошибка, что компилятор MQL разрешает использовать неоднозначные выражения , если есть модификатор const то это константа
этот же код компилятор не отследил? а другую ситуацию отследил
Шарп в VS2019 сразу еще до компиляции все подчеркнул
Видно речь шла о глобальных переменных с модификаторами const/static, а вы используете локальные.
может быть и перепутал, но поведение модификатора const сильно отличается от C#
Переменную объявленную с модификатором const нельзя изменять. Компилятор это отслеживает.
Вы видимо ожидаете от него что-то другое.
Вы видимо ожидаете от него что-то другое.
видимо да, ожидаю, что прыгая между MQL и C# все будет одинаково, ладно проехали
Build 2366
Спасибо за сообщение, проверю
mq5 - норм. mq4 - сломали. Можно взять TypeToBytes_ExampleScript.mq4 отсюда. Компилируется только в случае, если расширение поменять на mq5.
Здравствуйте, коллеги.
Возможно я не первый задаю этот вопрос. Писал в другую ветку, но ответа разработчиков не получил. Почему при реальной стоимости пункта на XAUUSD - 1USD
Функция SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); упорно показывает 0.1USD
И как при этом считать просадку, прибыль, и прочие вещи, в то время как на валютных парах показывает нормальную стоимость тика.
З.Ы. Терминал МТ5
Здравствуйте, коллеги.
Возможно я не первый задаю этот вопрос. Писал в другую ветку, но ответа разработчиков не получил. Почему при реальной стоимости пункта на XAUUSD - 1USD
Функция SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); упорно показывает 0.1USD
И как при этом считать просадку, прибыль, и прочие вещи, в то время как на валютных парах показывает нормальную стоимость тика.
З.Ы. Терминал МТ5
Это Вы у своего брокера спрашивайте, эти данные заполняет брокер...
Проблема возникает, когда используется одно и то же имя класса: в глобальном пространстве имен, в internal class и при наследовании в качестве базового класса.
В С++ все работает, если явно сослаться на глобальное пространство имен. С++ online: https://onlinegdb.com/BJIV6frUI
В MQL этого сделать нельзя - Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса. (не исправлено MT5(build 2366))
Так же проблем в конструкторе при вызове базового класса касается представленный ранее баг - https://www.mql5.com/ru/forum/1111/page2680#comment_15546487
Прошу обратить внимание, что он "работает" как при использовании пространства имен, так и с internal классами.