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

 
JRandomTrader #:

Это я что-то не понимаю, или тут действительно что-то не так?

Результат:

Конструктор с параметрами по умолчанию используется как конструктор по умолчанию (первый вызов A::A(int)), хотя в документации сказано, что это не так:

"Конструктор, все параметры которого имеют значения по умолчанию, не является конструктором по умолчанию.https://www.mql5.com/ru/docs/basis/types/classes#default_constructor

Второй вызов A::A(int) (из B::B(int) ) устанавливает значение a1, которое после "исчезает".

Когда выполняется тело конструктора класса B, конструктор его родительского класса уже отработал.

Если Вы не вызываете его явно в списке инициализации, то используется конструктор по умолчанию.

B::B( int b )
{
   A( b );
}

Этот код равен этому:

B::B( int b ) : A()
{
   A( b );
}

В теле конструктора класса B Вы создаёте временный объект класса A, который уничтожается сразу при выходе из конструктора.

 
JRandomTrader #:

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

Согласен.
 
Koldun Zloy #:

Когда выполняется тело конструктора класса B, конструктор его родительского класса уже отработал.

Если Вы не вызываете его явно в списке инициализации, то используется конструктор по умолчанию.

Этот код равен этому:

В теле конструктора класса B Вы создаёте временный объект класса A, который уничтожается сразу при выходе из конструктора.

Дело в том, что у него в классе A есть конструктор, а это означает, что конструктора по умолчанию в классе A нет. Поэтому результат поведения, который был показан выше, ошибочен. По-хорошему, компилятор должен был выдать ошибку.
 
Sergey Gridnev #:
Дело в том, что у него в классе A есть конструктор, а это означает, что конструктора по умолчанию в классе A нет. Поэтому результат поведения, который был показан выше, ошибочен. По-хорошему, компилятор должен был выдать ошибку.
Великая и ужасная тема. Правила инициализации объектов в С++))) Ну да, A() = delete явно надо указывать, иначе компилятор (я сейчас не про mql, хотя про него тоже) при выборе конструктора для A, абсолютно законно выбирает параметрический, если в нем все параметры имеют значения по умолчанию) 
 
Dmitriy Skub #:

Я дико извиняюсь, а что за хреновина с версией 3660 (судя по названию файла)? Никогда такого не было...

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

Обратите внимание, что ругался просто на попытку сохранить шифрованный и подписанный пакет обновления (его нельзя запустить), а не при запуске распакованного exe файла. То есть, это не реакция на исполнимый файл.

Все пакеты обновления подписаны нашим дополнительным RSA приватным ключом и не могут быть сохранены на диск, если пакет не подтвердится публичным ключом. Поэтому риска получить левый файл нет вообще.

Кроме того, все выполняемые файлы подписаны нашей Code Signing цифровой подписью

В общем, как обычно, ложная тревога.

 
Renat Fatkhullin #:

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

Обратите внимание, что ругался просто на попытку сохранить шифрованный и подписанный пакет обновления (его нельзя запустить), а не при запуске распакованного exe файла. То есть, это не реакция на исполнимый файл.

Все пакеты обновления подписаны нашим дополнительным RSA приватным ключом и не могут быть сохранены на диск, если пакет не подтвердится публичным ключом. Поэтому риска получить левый файл нет вообще.

Кроме того, все выполняемые файлы подписаны нашей Code Signing цифровой подписью

В общем, как обычно, ложная тревога.

Понято. Уже обновился на 3661, там такого сообщения нету.
 

Почему администрация не участвует в ветке про фриланс и игнорирует озвученную мной проблемы, имеющие реальный прецедент?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Что думают о сервисе Фриланс разработчики на MQL5

Aleksey Vyazmikin, 2023.03.16 13:03

По факту в сервисе Фриланс договор разбит на три части:

1. Обязанности заказчика в ТЗ.

2. Обязанности Исполнителя и Заказчиках в "Правила использования сервиса "Фриланс"".

3. В условиях оплаты и сроках исполнения заказа.

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

Пункт 3 - оплата и сроки исполнения - является существенной частью договора, и не может в одностороннем порядке меняться.

В моём случае, это существенно ухудшает права Исполнителя, так как согласно заключенному договору срок оказываемых услуг ограничен именно пунктом 3.

Считаю, что факт возможности изменения условий Договора в одностороннем порядке нарушает права Исполнителя, что дискредитирует данный Сервис Фриланс.


 

Здравствуйте .Подскажите пожайлуйста,почему не работает часть кода скрипта.Скрипт брал с этого портала.

if (!OrderMagicNumber() != Magic ) Ведь условия выполнены,а он перестает вообще закрывать все ордера.

Задача чтоб он не трогал советник с  MagicNumber,а все остальные ордера он закрывал,не зависимо как и кем они были открыты.

#property link     

#include <stdlib.mqh>

double Price[2];
int    giSlippage;
bool   CloseOrdersWithMinusProfit = true;

void start() {
  int iOrders=OrdersTotal()-1, i;
  
  if(CloseOrdersWithMinusProfit) {
    for(i=iOrders; i>=0; i--) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderProfit() <= 0))

{

         if (!OrderMagicNumber() != Magic )

{
        if((OrderType()<=OP_SELL) && GetMarketInfo())

{
          if(!OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],giSlippage)) Print(OrderError());
         }
       }
     }
   }
 }

}
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError() {
  int iError=GetLastError();
  return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError)));
}
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo() {
  RefreshRates();
  Price[0]=MarketInfo(OrderSymbol(),MODE_ASK);
  Price[1]=MarketInfo(OrderSymbol(),MODE_BID);
  double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
  if(dPoint==0) return(false);
  giSlippage=(Price[0]-Price[1])/dPoint;
  return(Price[0]>0.0 && Price[1]>0.0);
}
 
Evgenii70rus #:

Здравствуйте .Подскажите пожайлуйста,почему не работает часть кода скрипта.Скрипт брал с этого портала.

if (!OrderMagicNumber() != Magic ) Ведь условия выполнены,а он перестает вообще закрывать все ордера.



1. обратите внимание на предупреждения компилятора. 

2. уберите одно лишнее отрицание. Что вы хотели сказать этим условием ? видимо "если MagicNumber ордера не равен константе Magic, то {....} "  вот так и напишите

 
Maxim Kuznetsov #:

1. обратите внимание на предупреждения компилятора. 

2. уберите одно лишнее отрицание. Что вы хотели сказать этим условием ? видимо "если MagicNumber ордера не равен константе Magic, то {....} "  вот так и напишитеВ 

В том то и дело что компилятор не выдает ошибок,ни предупреждений, пробовал по разному.Просто перестает работать скрипт.!.....==,......!=,!.......!= и так и так и местами менял.А когда убираю эту часть кода то все работает.

Причина обращения: