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

 
speedy:

コンパイルボタンが永久に失われた(元に戻すにはエディタをリロードする必要がある)

まあ、ちょっと違うけど...。:) なんとか取り戻せました :)

再帰的な部分をコメントアウトして、デバッグコンパイルボタンを押さないとできないんです。

 
speedy:

1. ベースクラス以外の内部要素を外部に「公開」するのは安全ではない(この例では属性そのものではなく、配列要素のみ!)。 さらに、その値を変更することもできない。

さらに、オブジェクト指向プログラミングの「精神」に反する。オブジェクトのデータに対するすべての作業は、オブジェクトの内部で、そのオブジェクト自身のメソッドによって実行されるべきである...。

3.データ属性にSetterを使うだけではどうでしょうか?

4.コードの可読性を高めることができる。

5.結局、このL値インデクサの「単純さ」は、あなたを含めて誰もこのコードがどのように動作するかを理解できなくなる......。

6.Setterを書くより、エラーを探すのに時間がかかる。

何それ、ブラックユーモア?

1.すみません、-ナンセンスです。 ここではパラノイアが流行っていて、「なぜそれをやってはいけないのか」というクズみたいな論調だと理解しています。 私はそこに危険性を感じないんですが。よく見ると、どちらかというと。 どんな名前も、結局は参照です。 インデックスは、名前の概念の延長に過ぎないのです。安全のためにネーミングは禁止にしましょう。 リンクは非常に危険ですよね。

2.その論理は、C++、C#、Delphi、その他数十の一般的でない言語によるオブジェクト指向プログラミングの精神と激しく矛盾する。 しかも、それは常識と私の精神となぜか矛盾していない。

インデックスとは、外部環境と通信するために作られたもので、その機能はまさにインターフェースです。 カプセル化して隠すことは可能ですが、オブジェクトを配列として操作するためにはインデックスが必要なんです。実は、すべての配列は何らかの形で配置されている。例えば、通常の動的なmql配列。そこで、代入演算子の左側に置くことを禁止し、SetArrayValue(array, i, j, value)のような関数に置き換えることで、可読性を高めることも同時にできる。そして、デバッグも格段に楽になります。うっ...

3.普通のインデクサーを作ったらどうだろう? メイドももちろんかっこいいけど、やっぱりクイーンの方がいいよね。

4.ここからが本題ですが、読めない?

  t[i]=i*i;

この方が読みやすいでしょう?

  t.setDataElement(i, i*i);

治療を受けてくるよ

5.かっこいい。

6.泣いてしまいました。


 

インジケータがビルド630でコンパイルできなくなりました。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
 //код
 for(int i=limit; i<rates_total && !IsStopped(); i++)
  {
   if()
    {
     //~400 стр. кода
     // i используется много раз
     // тут же определяется RT=true или false
    }
   if(RT)
    {
     double p=close[i];  // 'i' - undeclared identifier
    }
  }
 return(rates_total);  // 'rates_total' - undeclared identifier
}

ciの エラーは、forの 前に広告を貼ることで解消されます。

int i;
for(i=limit; i<rates_total && !IsStopped(); i++)
{

}

また、未宣言の識別子である 'rates_total' はどうするのでしょうか?

Win7 x64、XP x32でも同様です。

 

教えてください。MathMin()、MathMax()は、関数(スタックにパラメータを 渡す)、マクロ代入(インライン)のどちらで実装されていますか?ハンドブックによると、これらは機能 である。

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
kPVT:

インジケータがビルド630でコンパイルできなくなりました。

ciの エラーは、forの 前に広告を貼ることで解消されます。

また、未宣言の識別子である 'rates_total' はどうするのでしょうか?

Win7 x64、XP x32でも同様です。

コードのどこかに間違いがあるはずです。変数limit、RT、条件if()を宣言すれば、提出したブロックはエラーなくコンパイルされます。
 
Rosh:
明らかにコードのどこかに間違いがありますね。変数 limit, RT を宣言し、条件 if() を設定すれば、投稿されたブロックはエラーなしでコンパイルされます。

当然、コードではなく、おおよその構成は伝えました。

619ビルドでは、インジケータはコンパイルされ、問題なく動作しました。

630では、上記のエラーが発生します。

コードは100%変更されていません。コンパイラの動作方法は明らかに変わっている。

 
サービスデスクまで ご連絡いただき、ソースコードを添付してください。これにより、開発者は原因を突き止め、修正することができます。
 
speedy:

バグ?

以下のコードは、コンパイラで一種の永久ループを生成しています。キャンセルをクリックする

はすぐには動作しませんが、動作するとエディタの制御を取り戻します。

キャンセルボタン自体は消えませんが、アクセスもできなくなります。

コンパイルボタンが永久に失われた(元に戻すにはエディタをリロードする必要がある)

投稿ありがとうございました!コンパイラのエラーは修正されました。
 
victorg:

アドバイスをお願いします。MathMin()とMathMax()は、関数(スタックにパラメータが渡さ れる)として実現されているのか、それともマクロ置換(インライン)として実現されているのでしょうか?参考文献によると、それらは機能 である。

もちろん関数です。コンパイル時には引数の値は不明ですから。IMHO インラインとマクロは別物です。

P.S.:インラインかインラインでないか......何とも言えませんね。

 
220Volt:

もちろん関数です。コンパイル時には引数の値は不明ですから。IMHO インラインとマクロは別物です。

P.S.:インラインかどうかは、私にはわかりません。

マクロとインライン関数は確かに別物です。でも、そういうことではないんです。以下は、コンパイルの時点で引数の値が不明な場合の例である。

#define  min(a,b) (((a)<(b))?(a):(b))
double func(a,b)
  {
  c=min(a,b);   // 1-й вариант
  c=fmin(a,b);  // 2-й вариант
  return(c);
  }

最初のケースでは、コードを現在の関数に貼り付ける必要があり(推測)、2番目のケースでは、スタックを介して渡されたパラメータで 関数が呼び出される(推測)。しかし、最適化のために、コンパイラは実際には2番目の変形も代入で実装することがあります。そうなんですか わからない。だから聞いたんです。

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5