MQL5中的OOP问题 - 页 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);
}
//+------------------------------------------------------------------+

我想用不带参数的构造函数来初始化B类,但我不能把SHash结构投到构造函数SHash(const double)中。

即我需要一些铸造(SHash)的双倍。

在我的例子中,有一个编译器错误:'(SHash)' - 无效的投掷操作


如果你这样写的话。

class B:BASE
{
public:
   B():BASE(0.0)                      {  }
};
错误:'0.0'--参数作为参考传递,变量应是

 
Igor Makanu:

关于铸造的另一个问题

有这样的代码。

我想用不带参数的构造函数来初始化B类,但我不能把SHash结构投到构造函数SHash(const double)中。

即我需要一些铸造(SHash)的双倍。

在我的例子中,有一个编译器错误:'(SHash)' - 无效的投掷操作


如果你这样写的话。

错误:'0.0'--参数作为参考传递,变量应是

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

它是这样工作的

但需要对SHash结构进行0xAAAAAAAA初始化--它是某种NULL--不能从测试字符串中获得MD5哈希值(我检查过)。

SHash()构造函数现在似乎不需要了,但几天前似乎还需要))。所以,一开始它不存在,然后我在某个地方修复了这个空构造函数的编译错误,或者在比较结构时,或者在初始化时......一般来说,很有可能需要....。尽管初始化所有变量似乎是一个很好的规则,....。

一般来说,我希望我有一个变体或毫不含糊的 - 没有))))

 
Igor Makanu:

它是这样工作的

但需要对SHash结构进行0xAAAAAAAA初始化--它是某种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呢?)

重点不是x),而是在接收端可能有一个浮点,只是0.0也不可靠。

 
Alexandr Andreev:

问题的关键不在于x),而在于除了小数点之外,接收器上可能还有一个浮点,只指定0.0也是不可靠的。

虽然这一切是一个细节...不是特别重要

 
Alexandr Andreev:

重点不在于x),而是在接收上可能有浮动的duble,所以只指定0.0也不可靠。

在这里初始化什么并不重要,甚至是int--任何数字都可以调用这个构造函数。

我选择0.0是为了避免误印--任何数字,即0.0,都比123更难书写和误印。