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

 
Rosh:

クラスについては、前方宣言を 参照してください。
こんにちは。

ご回答ありがとうございます!宣言の問題解決に役立ちます。

ところで、デバッグに関連するバグを1つだけ発見しました。

インジケーターのデバッグを行う場合、ブレークポイントモードで、MetaTraderのインジケーターリストを押してください。
アプリケーションがフリーズし、タスクマネージャー(kill)でしか停止しない


ご注意ください。
 
speedy:


ご注意ください。
ありがとうございます。
 

ストラテジーテスターのOnTimer()関数は、1秒ごとに要求されると実行速度がかなり遅くなります。 void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, with two external indicators and running through all ticks, is running 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) OnTimer() がコメントされると、実行が大幅に加速されます2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) この遅延はテスターによるものか、それとも何とかスピードアップできないか?

P.S. メッセージのプレビューが実装されていれば(

 
sion:

ストラテジーテスターのOnTimer()関数は、1秒ごとに要求されると実行速度がかなり遅くなります。 void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, with two external indicators and running through all ticks, is running 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) OnTimer() がコメントされると、実行が大幅に加速されます2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) この遅延はテスターによるものか、それとも何とかスピードアップできないか?

P.S. メッセージのプレビューが実装されていれば(

エディターパネルの「SRC」ボタンからコードを挿入するのがよいでしょう。
 
papaklass:

テスターのこの項目は何を意味しているのでしょうか?

履歴ページングに関するシステムメッセージです。
 

笑えない。

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

mql5の一般的なケースでの リンクは関数から返されないのは理解できるのですが(ところで、なぜそうしないのでしょうか)、そうすると、l値インデクサを可能にするための工夫が必要です。 例えば、左利き用インデクサの一般ルールに構文上の例外を設けるとかです。あるいは何らかのキーワード。

跛行が明らかにmql5...を素敵に見せていない。

 
MetaDriver:

リンプは明らかにmql5を...見栄え良くしていない

mql5はまだ「小さい」ですが、ビルドからビルドへの成熟が非常に早いので、侮るなかれ。
 
MetaDriver:

この跛行は、明らかにmql5...をよく見せていない。

そのためには、本格的なリンクを構築する必要があります :)

ZS: 漏れてるんですよ :)

 

バグ?


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

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

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

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


#include <Object.mqh>.

クラスB

クラス A: B {
void a();
};

クラス B: A {

CObject* a;
void b()。
};
 
MetaDriver:

笑えない。

mql5関数の一般的なケースでの リンクが返らないのは理解したいのですが(ところで、なぜできないのでしょうか?)、代わりにl値インデクサを可能にするために何かすべきです。例えば、左利きインデクサのための一般的なルールの構文例外を作るなどです。あるいは何らかのキーワード。

ラメが明らかにmql5...をいい感じにしてない。

特に、その値を変更する可能性のある、ベースクラス以外の内部要素を外部に "渡す" ことは安全ではありません。

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


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

コードの可読性では勝っているだろう。結局、このl値インデクサーの「単純さ」は、このコードがどのように動作するのか、誰も理解できなくなるのです...。

Setterを書く時間よりも、エラーを探す時間の方が長くなってしまいます。

以下はその一例です。

while ((double)date[++i -1] < 10) のようなコードを、もっと長くても消化しやすいものに置き換えられるなら、そのようにした方が良いのですが...。

構造体テスト

{

double data[];

int sizeです。

void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}; ArrayResize(data,fmin(size,Max));}.

void setDataElement (int index, double value)

{

data[index] = value;

}


プライベート

static int Max;

};

//+------------------------------------------------------------------+


int Test::Max=1024;

//+------------------------------------------------------------------+

//| スクリプトプログラム起動機能

//+------------------------------------------------------------------+

void OnStart()

{

テストT。

t.Init(16);

for(int i=0;i<t.size;i++)

{

//t[i]=i*i; // ERROR :'=' - l-value required

t.setDataElement(i, i*i);

}

}