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

 
comp:

Чтобы не смущала условная компиляция, убрал ее

Пятерка не может скомпилировать, четверка - OK. 

а лог ошибок какой выдает?
[Удален]  
coderex:
а лог ошибок какой выдает?
'ObjectSetDouble' - no one of the overloads can be applied to the function call
'ObjectSetInteger' - no one of the overloads can be applied to the function call

[Удален]  
comp:
'ObjectSetDouble' - no one of the overloads can be applied to the function call
'ObjectSetInteger' - no one of the overloads can be applied to the function call

Похоже, догадался. В MT5 надо четко указывать все три ENUM_OBJECT_PROPERTY_STRING, ENUM_OBJECT_PROPERTY_INTEGER и ENUM_OBJECT_PROPERTY_DOUBLE. А в MT4 достаточно просто указать int, и все будет работать.

В данном случае даже и не знаю, является ли MQL5 лучшим решением, чем MQL4. 

 
comp:
'ObjectSetDouble' - no one of the overloads can be applied to the function call
'ObjectSetInteger' - no one of the overloads can be applied to the function call

Все верно он ругнулся, в метод передаете в качестве входного параметра для ObjectSetDouble и ObjectSetInteger недопустимый параметр ENUM_OBJECT_PROPERTY_STRING id

Вообще не делайте вы общую библиотеку для двух языков, больше путаницы будет, сам одно время так делал, потом пришлось все переделывать. 

[Удален]  
comp:

Похоже, догадался. В MT5 надо четко указывать все три ENUM_OBJECT_PROPERTY_STRING, ENUM_OBJECT_PROPERTY_INTEGER и ENUM_OBJECT_PROPERTY_DOUBLE. А в MT4 достаточно просто указать int, и все будет работать.

Точно!

#ifdef __MQL4__
  #define ENUM_OBJECT_PROPERTY_DOUBLE int
  #define ENUM_OBJECT_PROPERTY_STRING int
  #define ENUM_OBJECT_PROPERTY_INTEGER int
#endif

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, "", (ENUM_OBJECT_PROPERTY_DOUBLE)id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", (ENUM_OBJECT_PROPERTY_STRING)id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", (ENUM_OBJECT_PROPERTY_INTEGER)id, Modifier, (long)Value);

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

    return;
  }
};

 Теперь компилится в обеих платформах. В справке пятерки явно ошибка.

 
comp:

Точно!

 Теперь компилится в обеих платформах. В справке пятерки явно ошибка.

Какая ошибка?
[Удален]  
Slawa:
Какая ошибка?

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

bool  ObjectSetInteger( 
   long    chart_id,          // идентификатор графика 
   string  name,              // имя 
   int     prop_id,           // свойство 
   long    prop_value         // значение 
   );

 А должно быть

bool  ObjectSetInteger( 
   long                          chart_id,  // идентификатор графика 
   string                        name,      // имя 
   ENUM_OBJECT_PROPERTY_INTEGER  prop_id,   // свойство 
   long                          prop_value // значение 
   );

Как в пятерке с IndicatorBuffers быть в случае, когда количество ВЫЧИСЛИТЕЛЬНЫХ буферов нельзя жестко задать через #property? В четверке с этим нет ограничений.

 
comp:

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

 А должно быть

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

prop_id

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

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

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

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

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

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

А надо

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

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

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