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

 
svds75:

Приветствую уважаемое сообщество.

Не смог найти на сайте, и сам не пойму уже пол дня, почему этот код пишет ошибку. Подскажите если не затруднит.

а зачем удалять объект?
 
sergeev:
а зачем удалять объект?
На самом деле программа более сложная. Я ее уже упростил до безобразия что-бы понять в чем проблема. Но так и не понял.
 
svds75:
На самом деле программа более сложная. Я ее уже упростил до безобразия что-бы понять в чем проблема. Но так и не понял.
Попробуйте понять, почему сообщение только одно, а не каждый тик, тогда вопросов не будет.
 
svds75:
На самом деле программа более сложная. Я ее уже упростил до безобразия что-бы понять в чем проблема. Но так и не понял.

судя по стилистике кода еще можно упрощать. коментируйте чуток

может в if/else запутался?

 
svds75:

Приветствую уважаемое сообщество.

Не смог найти на сайте, и сам не пойму уже пол дня, почему этот код пишет ошибку. Подскажите если не затруднит.

Пир таком оформлении код лучше читается и сразу видна ошибка:

//---
   string nameObject="testObject";
   ChartRedraw(0);
   ResetLastError();
   if(ObjectFind(0,nameObject)>=0)     // конечно объект не найден
     {
      if(!ObjectDelete(0,nameObject))
        {
         if(_LastError>0)
           {
            Print("1 Ошибка №",_LastError);
            ResetLastError();
           }
        }
     }
   ChartRedraw(0);
   if(_LastError>0)
     {                                 // поэтому сразу переходим сюда:
      Print("2 Ошибка №",_LastError);  // Тут ошибка №4202 <Графический объект не найден>
      ResetLastError();
     }
 
mql5:
Попробуйте понять, почему сообщение только одно, а не каждый тик, тогда вопросов не будет.
Извините, не понял. Возможно Вы знаете ответ, и дали мне подсказку. Об этом я тоже думал, вот если бы еще сказали какая функция, ObjectFind() или ObjectDelete() пишет в _LastError ошибку, или еще какая, может до меня бы и дошло.
sergeev:

судя по стилистике кода еще можно упрощать. коментируйте чуток

может в if/else запутался?

Я перепробовал много вариантов (даже в данном коде), не говоря уже о месте применения. А if/else ниже так вообще вроде можно удалить и ошибка остается.

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

 
barabashkakvn:

Пир таком оформлении код лучше читается и сразу видна ошибка:

А в чем ошибка то? Неужели даже если ты знаеш что объекта нет, его нельзя проверить на существование? 

А по поводу оформления, как говорится "на вкус и цвет..."

 
svds75:

А в чем ошибка то? Неужели даже если ты знаеш что объекта нет, его нельзя проверить на существование? 

А по поводу оформления, как говорится "на вкус и цвет..."

ObjectFind

Возвращаемое значение

В случае удачи функция возвращает номер подокна (0 означает главное окно графика), в котором находится найденный объект. Если объект не найден, то функция возвращает отрицательное число. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

Если объект не найден - то это и есть ошибка. При этом сама функция ObjectFind вернет отрицательное число, а номер ошибки можно получить.

 Вот так нагляднее:

//---
   string nameObject="testObject";
   ChartRedraw(0);
   ResetLastError();
   int find=ObjectFind(0,nameObject);
   if(find>=0)     // конечно объект не найден
     {
      if(!ObjectDelete(0,nameObject))

 Запустите в отладке и посмотрите значение переменной "find"

 
svds75:
Извините, не понял. Возможно Вы знаете ответ, и дали мне подсказку. Об этом я тоже думал, вот если бы еще сказали какая функция, ObjectFind() или ObjectDelete() пишет в _LastError ошибку, или еще какая, может до меня бы и дошло.

Я перепробовал много вариантов (даже в данном коде), не говоря уже о месте применения. А if/else ниже так вообще вроде можно удалить и ошибка остается.

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

Сообщение только одно, т.к. при первом вызове OnCalculate объекта не существует и ObjectFind взводит ошибку, затем объект создаётся, поэтому последующие вызовы ObjectFind в OnCalculate отрабатывают без ошибки.
 
barabashkakvn:
ObjectFind

Возвращаемое значение

В случае удачи функция возвращает номер подокна (0 означает главное окно графика), в котором находится найденный объект. Если объект не найден, то функция возвращает отрицательное число. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

Если объект не найден - то это и есть ошибка. При этом сама функция ObjectFind вернет отрицательное число, а номер ошибки можно получить.

 Вот так нагляднее:

 Запустите в отладке и посмотрите значение переменной "find"

Все понял, спасибо что разжували. Просто думал что ошибка пишется к примеру при не верном параметре ObjectFind или еще что, хотя это делает компилятор. Ну мало ли, тем более написано "Чтобы получить дополнительную информацию об ошибке...". 

В общем спасибо, теперь учтем.