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

 
comp:

Например, в описании ObjectSetInteger сейчас

 А должно быть

Читайте топики до конца

prop_id

[in]  Идентификатор свойства объекта. Значение может быть одним из значений перечисления ENUM_OBJECT_PROPERTY_INTEGER.

Сказал же я уже Вам. Читайте документацию внимательно, без шашки в руке.
 
Slawa:

Читайте топики до конца

Сказал же я уже Вам. Читайте документацию внимательно, без шашки в руке.

Читал ОЧЕНЬ внимательно и до конца. Ваша же цитата оттуда

Идентификатор свойства объекта. Значение может быть одним из значений перечисления ENUM_OBJECT_PROPERTY_INTEGER.

А надо

Идентификатор свойства объекта. Значение ДОЛЖНО быть одним из значений перечисления ENUM_OBJECT_PROPERTY_INTEGER.

Требование явного привидения к этому типу подтверждает единственно компилируемый в пятерке вариант (сами проверьте). Без этого привидения компилятор ругается на отсутствие соответствующих перегрузок. 

 
Не знал такой фишки. Если в пятерочном метаэдиторе открыть mq4-файл, то он будет компилироваться в ex4!
 
один компилятор один Editor
 

То есть, по окончании прочтения Вы додумали " Значение может быть одним из значений перечисления ENUM_OBJECT_PROPERTY_INTEGER. А может и не быть. А чем может не быть, в документации не указано, значит разрешено всё, что не запрещено. Так как мы распространяем принципы общественной жизни на программирование"

Интересно, а что Вам подсказал MetaEditor про тип соответствующего параметра при наборе параметров этой функции?

 
В справке MQL много неоднозначностей. Поэтому в этом смысле comp прав - чем меньше вариантов возможных интерпретаций прочтения справки, тем лучше. 
 
Slawa:

То есть, по окончании прочтения Вы додумали " Значение может быть одним из значений перечисления ENUM_OBJECT_PROPERTY_INTEGER. А может и не быть. А чем может не быть, в документации не указано, значит разрешено всё, что не запрещено. Так как мы распространяем принципы общественной жизни на программирование"

Нет, так не подумал. Я подумал, что если код компилируется без ошибок под MT4, то он должен компилироваться без ошибок и под MT5. Когда этого не произошло, стал копать. Проверьте код на MT4 и на MT5 и убедитесь

class CHARTOBJECT
{
public:
  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

Интересно, а что Вам подсказал MetaEditor про тип соответствующего параметра при наборе параметров этой функции?

Сейчас посмотрел - подсказывает правильно и как раз с тем уточнением, которое указал выше. В документации же стоит int.

 
comp:

Нет, так не подумал. Я подумал, что если код компилируется без ошибок под MT4, то он должен компилироваться без ошибок и под MT5. Когда этого не произошло, стал копать. Проверьте код на MT4 и на MT5 и убедитесь

С чего это?

MT4 и MT5 имеют изначально разную архитектуру

При переводе MQL4 со старого синтаксиса на новый (то, что называют MQL4+) мы были вынуждены оглядываться на прежний синтаксис MQL4, в котором много чего не было, в том числе перечислений.

 

comp, давайте-ка добровольно в read only на неделю. Побудьте читателем, а не писателем.

Всё, о чём Вы тут рассказываете, уже многократно обсуждалось-переобсуждалось не только на этом форуме, но и на форуме MQL4.com.

 
Slawa:

С чего это?

MT4 и MT5 имеют изначально разную архитектуру

При переводе MQL4 со старого синтаксиса на новый (то, что называют MQL4+) мы были вынуждены оглядываться на прежний синтаксис MQL4, в котором много чего не было, в том числе перечислений.

Спорить можно долго и безуспешно. Факт, если бы в документации был бы не int, а как в подсказе при наборе имени функции, то я бы сразу нашел причину ругани компилятора (в примере с шаблоном это не очевидно было). Потому что согласно документации код обязан был компилироваться, т.к. там int и "может". Что мешает привести соответствие документации и всплывающих подсказок - не знаю. Но на будущее запомню, что при непонятках лучше еще посмотреть, что подсказки показывают, а не документация.
Причина обращения: