エラー、バグ、質問 - ページ 2359

 
A100:

を考慮して、特に再確認しました。

It's OK DJ.

使用するコンパイラは?

VS 2010を使用しています。

二項演算子 '=' : 右辺のオペランドが 'A' 型である演算子が存在しない(あるいは許容できる変換がない)。

p.s. 「配慮して」の意味がよくわからないのですが?それは、ベースクラスを派生クラスに暗黙的にコピーすることの可否についてでした。

 

Visual Studioでは、私の例も 動作します。明示的なコピー演算子のことで、コードで説明しました。

念のため書いておきますが、明示的なものを無効化した場合、誤って同時に無効化することがないようにするためです

 
A100:

Visual Studioでは、私の例も 動作します。明示的なコピー演算子のことで、コードで説明しました。

私は明示的な演算子のことではなく、あなたが「狭量」とおっしゃるこの場合の暗黙的な演算子の不許可についてお話したのですが、そうではありませんね。

コピーを作成する必要がある場合、まずC++で明示的にbを正しい型にキャストする必要があります。このようなコピーは、オブジェクトのカプセル化に反するからです。だからこそ、暗黙の了解ではいけないのです。

 
A100:

明示的なコピー演算子という意味で、コードで説明しました。

ところで、クラスAがクラスXを継承している場合、クラスBはXのコピーから保護されません(MQLの話です)。 すべての親クラスに対して演算子を記述しなければなりません。
 
A100:

コンパイラが(コードの文脈で)明示的と暗黙的に分けているのか疑問です。そうでなければ、修正するのは簡単だ

つまり、あるオブジェクトがB型であれば、その暗黙の演算子はconst B&型であり、A型をとることはないのです。
 

ちなみに、演算子型は問題ないようです

まず演算子B::を探し、それがなければ、次に演算子A::を探し、そこにもなければ、役目は終わったとみなして何もしない(結果的にポインタは壊れるが) :)。

 
Ilya Malev:

もない場合は、役目を終えたと判断して何もしない(ポインターは壊れてしまうが) :)

なぜ、何もしないのですか?暗黙のうちに(自動的に)operator=(const A&)でコピーしているが、これはやってはいけないことである。

そして最後にBの後のアスタリスクを削除してください、目が痛くなります)このバグで既に全てが判明しています。

 
Alexey Navoykov:

そして最後にBの後のアスタリスクを取ってください、目が痛くなります)このバグでもう全部わかってしまいましたね。

個人的にはアスタリスクのないオブジェクト変数は邪魔に感じます ))厄介なバグの一つは、*aの代わりにA a=new Aと書いて、何が間違っているのか長い間理解できないことです)私は逆に、あなたのアドバイスに従って、プライベートop.=&を宣言すればすべてが正しく動作することを示しました。この場合、エディタはすぐにエラーを出します。これからはそのようにします ))

 
数時間かけて、矛盾点を探した。こんなの見つけた
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const double Koef =  0.25;
  const int iDelta = 32;
  const double point = 0.00001;
  
  const double high = 1.06736;
  const double low = 1.06676;
  
  const double Avg = (high + low) * 0.5;  
  const double Size = (high - low) * Koef * 0.5;  
  
  PRINT(DoubleToString(Avg - Size - point * iDelta, 5));   // DoubleToString(Avg-Size-point*iDelta,5) = 1.06666
  PRINT(DoubleToString(Avg - (Size + point * iDelta), 5)); // DoubleToString(Avg-(Size+point*iDelta),5) = 1.06667
} 


クセのあるダブルは知っていても、足し算の順番を変えれば(相対的に 非常に異なる数字を除いて)結果が違う!というようなことはない。なぜここでこうなるのか、バカでもわかるように説明してください。

ソースの下2行を見ればわかる。

 

開発者向けのエラーです。

スクリプトがコンパイルされません、原因を特定してください))。添付ファイルをご利用ください。


同じファイルです。


ファイル:
Test1.mq5  9 kb