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

 
Koldun Zloy:

Здесь тоже всё правильно.

не правильно!

специально проверил в VS2019:

class A
    {
        private int f1() { return 1; }
        private int f2() { return 2; }
        public int  f(int v) { const int a = f1(); const int b = f2(); return (v + a + b); }
    }

Ошибка CS0133 Назначаемое для "a" выражение должно быть константным. ConsoleApp2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Активные

Ошибка CS0133 Назначаемое для "b" выражение должно быть константным. ConsoleApp2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Активные

 
Igor Makanu:

в прошлом году работало не так - специально тестировал модификаторы const

и кажется @Ilyas объяснял как происходит запуск MQL-программы, сначала инициализируются все const и static вне зависимости от того где они описаны, затем уже конструкторы классов будут вызваны

ладно, с этой инициализацией static / const - ее можно еще правильно распределить, но вот то, что модификатор const не гарантирует, что компилятор это проверит - очень неожиданно - мой второй пример

В обоих Ваших примерах всё работает правильно и ожидаемо.

 
Koldun Zloy:

В обоих Ваших примерах всё работает правильно и ожидаемо.

ожидаемо, что модификатор const это 99% уверенность, что компилятор найдет мою ошибку при компиляции, VS2019 это делает, MQL это не делает

 
Igor Makanu:

ожидаемо, что модификатор const это 99% уверенность, что компилятор найдет мою ошибку при компиляции, VS2019 это делает, MQL это не делает

Что конкретно Вы считаете ошибкой?

У меня VS2019 не выдаёт никаких ошибок.

 
Igor Makanu:

в прошлом году работало не так - специально тестировал модификаторы const

и кажется @Ilyas объяснял как происходит запуск MQL-программы, сначала инициализируются все const и static вне зависимости от того где они описаны, затем уже конструкторы классов будут вызваны

Видно речь шла о глобальных переменных с модификаторами const/static, а вы используете локальные.

 
Koldun Zloy:

Что конкретно Вы считаете ошибкой?

У меня VS2019 не выдаёт никаких ошибок.

ошибка, что компилятор MQL разрешает использовать неоднозначные выражения , если есть модификатор const то это константа

этот же код компилятор не отследил? а другую ситуацию отследил

Шарп в VS2019 сразу еще до компиляции все подчеркнул 

class A{
public:
   int ivalue;
   int inc()const {static int v = 0; return(++v);}
   A():ivalue(0){}
};

class B{
public:
   int ivalue;
   int inc(){return(++ivalue);}
   B():ivalue(0){}
};

//+------------------------------------------------------------------+
void OnStart()
{
   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#

 

Переменную объявленную с модификатором const нельзя изменять. Компилятор это отслеживает.

Вы видимо ожидаете от него что-то другое.

 
Koldun Zloy:

Вы видимо ожидаете от него что-то другое.

видимо да, ожидаю, что прыгая между MQL и C# все будет одинаково, ладно проехали

 

Build 2366

namespace X
{

class A
{
public:
   A(){}
};

}  //  namespace X

class B : public X::A
{
public:
   B() : X::A()  //'X' - struct member undefined
   {
   }
};
 
Ilyas:

Спасибо за сообщение, проверю

mq5 - норм. mq4 - сломали. Можно взять TypeToBytes_ExampleScript.mq4 отсюда. Компилируется только в случае, если расширение поменять на mq5.