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

 
один компилятор один 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 и "может". Что мешает привести соответствие документации и всплывающих подсказок - не знаю. Но на будущее запомню, что при непонятках лучше еще посмотреть, что подсказки показывают, а не документация.
[Удален]  
Slawa:

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

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

Я же изначально спросил причину. Никто не смог ответить. Разобрался сам и выложил решение. Объяснил, что внесло путаницу.
 
А документацию мы поправим
 
comp:

Для четверки

Для пятерки аналогично.

 FullOnCalculate()   То что надо. Прекрано работет!!! Искренне благодарен.