Вопросы по ООП в MQL5 - страница 81

 

еще вопрос про кастинг

есть такой код:

struct SHash
   {
      ulong hash[2];
      SHash()                                {  }
      SHash(const double)                    { ArrayInitialize(hash, 0xAAAAAAAAAAAAAAAA);                }
      SHash(const SHash &val)                { ArrayCopy(hash, val.hash);                                }
      bool operator==(const SHash &val)const { return(hash[0] == val.hash[0] && hash[1] == val.hash[1]); }
   };
//+------------------------------------------------------------------+
class BASE
{
private:
   const SHash _hash;
protected:
   BASE(SHash &hash): _hash(hash)             {  }
};

class A:BASE
{
public:
   A(SHash &hash):BASE(hash)                 {  }
};


class B:BASE
{
public:
   B():BASE((SHash)0.0)                      {  }
};

//+------------------------------------------------------------------+
void OnStart()
{
   SHash h(0.0);
   A a(h);
}
//+------------------------------------------------------------------+

и хочу класс В инициализировать конструктором без параметров, но не получается сделать кастинг структуры SHash к конструктору SHash(const double)   

т.е. нужен некий кастинг (SHash) double

в моем примере ошибка компилятора: '(SHash)' - invalid cast operation


если записать так:

class B:BASE
{
public:
   B():BASE(0.0)                      {  }
};
ошибка: '0.0' - parameter passed as reference, variable expected

 
Igor Makanu:

еще вопрос про кастинг

есть такой код:

и хочу класс В инициализировать конструктором без параметров, но не получается сделать кастинг структуры SHash к конструктору SHash(const double)   

т.е. нужен некий кастинг (SHash) double

в моем примере ошибка компилятора: '(SHash)' - invalid cast operation


если записать так:

ошибка: '0.0' - parameter passed as reference, variable expected

class B:BASE
{
public:
   B():BASE(SHash())                      {  }
};
 
Vladimir Simakov:

так работает

но нужна инициализация 0xAAAAAAAAAAAAAAAA для структуры SHash - это некий NULL - не получаемый MD5-хеш из тестовой строки (проверял)

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

в общем еще бы вариант или однозначное - нет )))

 
Igor Makanu:

так работает

но нужна инициализация 0xAAAAAAAAAAAAAAAA для структуры SHash - это некий NULL - не получаемый MD5-хеш из тестовой строки (проверял)

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

в общем еще бы вариант или однозначное - нет )))

SHash(0.0)

, а самому догадаться?)))

 
Vladimir Simakov:

, а самому догадаться?)))

SHash((double)x)
 
Vladimir Simakov:

, а самому догадаться?)))

class B:BASE
{
public:
   B():BASE(SHash(0.0))                      {  }
};

блин, работает!

вроде и так тоже пробовал, не пойму почему не получилось

спасибо! 

жестко накосячил (((

 
Alexandr Andreev:

Ага, а x в конструкторе класса откуда возьмешь?)))

 
Vladimir Simakov:

Ага, а x в конструкторе класса откуда возьмешь?)))

суть не в х) а то что там может быть и float на приеме по мимо дабла, указывать просто 0.0 Тоже не надежно

 
Alexandr Andreev:

суть не в х) а то что там может быть и float на приеме по мимо дабла, указывать просто 0.0 Тоже не надежно

хотя все это таке детали... не особо важные

 
Alexandr Andreev:

суть не в х) а то что там может быть и float на приеме по мимо дабла, указывать просто 0.0 Тоже не надежно

там не суть чем инициализировать, хоть int  - любое число, чтобы вызвать именно этот конструктор

а 0.0 выбрал, чтобы не было опечаток - любая цифра, т.е. 0.0. написать и опечататься сложнее чем 123