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

 
У меня вопрос, как сейчас можно найти бесплатные сигналы? Я периодически в ручную нахожу их, а на странице сигналов только платные. Фильтр по стоимости не дает возможность их найти.
 
Перекомпиляция библиотеки, подключенной к эксперту, который выбран в тестере, не приводит к её подхвату при следующем запуске. Приходится выбирать другой эксперт в тестере, потом переключаться на прежний. Только тогда тестер подхватывает новую библиотеку. Совершенно неочевидный баг.
 
Stanislav Korotky:
Перекомпиляция библиотеки, подключенной к эксперту, который выбран в тестере, не приводит к её подхвату при следующем запуске. Приходится выбирать другой эксперт в тестере, потом переключаться на прежний. Только тогда тестер подхватывает новую библиотеку. Совершенно неочевидный баг.

В стабильной версии то же самое...

 
Баг МТ5 (build 2407) ошибка компиляции, когда класс содержит указатель на класс-обертку, который использует данный класс как поле.
C++ online: https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
Ошибка при компиляции:
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

а так:

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

нормально. А какая разница?

 
A100:
Ошибка при компиляции:

а так:

так нужно первый Ваш пример писать - с форвард описанием, кстати форвард-описание для структур и классов тоже работает

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

нормально. А какая разница?

думаю,что синтаксический разбор компилятора сверху вниз и в конце последним будет проанализирована OnStart()
 
Igor Makanu:
думаю,что синтаксический разбор компилятора сверху вниз и в конце последним будет проанализирована OnStart()

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

 
A100:

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

увы, тут это называется особенности языка, можно так писать

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

увы, тут это называется особенности языка, можно так писать

Все особенности отражаются в Документации. Такой я там не видел. Отсюда вывод: что это не особенность, а недоработка

 
A100:

В данном случае думать не нужно - правила должны быть общими: если можно применить функцию до объявления, то можно, если нет, то нет. Соответственно оба случая должны либо компилироваться либо нет 

Это обычное поведение С подобных языков.

Без форвардной декларации функций их нельзя использовать. Вызов из OnStart по факту компилируется отложенно, по сравнению с прямым вызовом на глобальном уровне.

В С++ точно такую же ошибку выдаст.

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