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

 
Maxim Kuznetsov #:

если функция/метод нигде не вызывается, то "по мнению компилятора" и хрен с ней :-) детальный анализ по поводу ошибков производится не будет

возможно по { } компилятор сориентировался в графе вызовов и проигнорил

fxsaber #:

Потому что все правильно.

Это третий входной параметр функции iOpen (слева).

А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать?

 
Aleksey Vyazmikin #:

А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать?

Логическое выражение.

bool A = 1;
bool B = iOpen(Symbol(),PERIOD_M1,0)<Price_RSI_Center_0;
bool C = A && B;

// iOpen(Symbol(),Signal_TF_RSI,1 && iOpen(Symbol(),PERIOD_M1,0)<Price_RSI_Center_0)
iOpen(Symbol(),Signal_TF_RSI,C)
 
fxsaber #:
Можно возразить, что это касается и простых типов (int->long и т.д.).

Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных.

void OnStart()
  {
   int a = 1;
   f(a);       // void f(int)
   f((long)a); // void f(long)
  }

void f(int) { Print(__FUNCSIG__); }

void f(long) { Print(__FUNCSIG__); }
 
Vladislav Boyko #:

Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных.

Согласен.

 
fxsaber #:

Логическое выражение.

Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть.

 
Aleksey Vyazmikin #:

Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть.

Не должно быть.

void f( int ) {}

void OnStart()
{
  f(true); // OK
}
 
Еще случай, когда без разыменования указателя не обойтись.
class A
{
public:
  void operator =( const A* ) { Print(__FUNCSIG__); }
};

void OnStart()
{
  A* a = new A;
  
  *a = a; // void A::operator=(const A*)

  delete a;
}
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 

Методы для работы с массивами.  В справка описаны методы, которых нет. Зато есть методы не описанные в справке.

При попытке скомпилировать вот это:

void OnStart()
  {
   double array[];
   int size = 3;
   array.Reserve(size);
  }

Закрывается метаэдитор )))

Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак.

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


ЗЫ. Я хотел написать  array.Resize(size), ну как в справке написано    int array.Resize(const int range_sizes[], const int reserve);

но в метаэдиторе ресайза не нашлось.

 
Aleksandr Slavskii #:

Методы для работы с массивами.  В справка описаны методы, которых нет. Зато есть методы не описанные в справке.

При попытке скомпилировать вот это:

Закрывается метаэдитор )))

Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак.

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


ЗЫ. Я хотел написать  array.Resize(size), ну как в справке написано    int array.Resize(const int range_sizes[], const int reserve);

но в метаэдиторе ресайза не нашлось.

Ну, чисто логически, если входной параметр const 

   bool              Reserve(const int size);

значит переменную нельзя. Я попробовал бы поставить перед переменной 

array.Reserve(const size);

но абсолютно неуверен, что прокатит.