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

 

私の場合は、使えるロジックがないのが辛いところです。

これらの入力を持つ関数があります。

int Tree_Calcf(int &arr_List_Buy[],int &arr_List_Sell[],int Vektor_ZZ,int Variant_Tree_Buy=0,int Variant_Tree_Sell=0)
{
int CalcBuy=1;
int CalcSell=1;
//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

if (Vektor_ZZ==1)
{
if(Variant_Tree_Buy==1)
{
                        if(arr_List_Buy[272]< 0.5 && arr_List_Buy[100]< 0.5 && arr_List_Buy[249]< 0.5 && arr_List_Buy[147]< 0.5 && arr_List_Buy[350]< 0.5 && arr_List_Buy[383]< 0.5 && arr_List_Buy[463]< 0.5 && arr_List_Buy[250]< 0.5 && arr_List_Buy[283]< 0.5 && arr_List_Buy[204]< 0.5 && arr_List_Buy[499]< 0.5 && arr_List_Buy[296]< 0.5 && arr_List_Buy[486]< 0.5 && arr_List_Buy[209]< 0.5 && arr_List_Buy[453]< 0.5 && arr_List_Buy[333]< 0.5 && arr_List_Buy[137]< 0.5 && arr_List_Buy[127]< 0.5 && arr_List_Buy[191]< 0.5 && arr_List_Buy[395]< 0.5 && arr_List_Buy[224]< 0.5 && arr_List_Buy[432]< 0.5 && arr_List_Buy[378]< 0.5 && arr_List_Buy[25]< 0.5 && arr_List_Buy[441]< 0.5 && arr_List_Buy[2]< 0.5 && arr_List_Buy[465]< 0.5 && arr_List_Buy[231]< 0.5 && arr_List_Buy[482]< 0.5 && arr_List_Buy[324]< 0.5) CalcBuy=0; //(0.83965634 0.16034366)
//--Вырезана часть аналогичного кода - листья дерева
}

//V03
if(Variant_Tree_Buy==2)
{
//---Вырезан код, он не активируется в момент ошибки}
//--Дерево на базе активации листьев без фильтров
if(Variant_Tree_Buy==3)
{
//---Вырезан код, он не активируется в момент ошибки}
}
//----TreeList_Sell
if(Vektor_ZZ==-1)
{
if(Variant_Tree_Sell==1)
{

                        if(arr_List_Sell[127]< 0.5 && arr_List_Sell[275]< 0.5 && arr_List_Sell[42]< 0.5 && arr_List_Sell[389]< 0.5 && arr_List_Sell[121]< 0.5 && arr_List_Sell[410]< 0.5 && arr_List_Sell[39]< 0.5 && arr_List_Sell[348]< 0.5 && arr_List_Sell[358]< 0.5 && arr_List_Sell[143]< 0.5 && arr_List_Sell[396]< 0.5 && arr_List_Sell[364]< 0.5 && arr_List_Sell[354]< 0.5 && arr_List_Sell[160]< 0.5 && arr_List_Sell[324]< 0.5 && arr_List_Sell[46]< 0.5 && arr_List_Sell[38]< 0.5 && arr_List_Sell[397]< 0.5 && arr_List_Sell[295]< 0.5 && arr_List_Sell[48]< 0.5 && arr_List_Sell[322]< 0.5 && arr_List_Sell[363]< 0.5 && arr_List_Sell[40]< 0.5 && arr_List_Sell[420]< 0.5 && arr_List_Sell[43]< 0.5 && arr_List_Sell[230]< 0.5 && arr_List_Sell[10]< 0.5 && arr_List_Sell[471]< 0.5 && arr_List_Sell[507]< 0.5 && arr_List_Sell[259]< 0.5) CalcSell=0; //(0.78952321 0.21047679)





//--Вырезана часть аналогичного кода - листья дерева
} if(Variant_Tree_Sell==2) { //---Вырезан код, он не активируется в момент ошибки } //--Дерево на базе активации листьев без фильтров if(Variant_Tree_Sell==3) { //---Вырезан код, он не активируется в момент ошибки } } int Rez=0; if(Vektor_ZZ==1)Rez=CalcBuy; if(Vektor_ZZ==-1)Rez=CalcSell; Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell); return Rez; }

そのため、このFunctionは時々769という値を出力します。

2020.03.01 15:54:23.500 Core 1  2019.11.13 22:57:00   Rez_Tree_Calc=769 - f Vektor_ZZ=-1 CalcSell=769

最初のプリントをアンコメントすると

//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

とすると、正しい値が表示されます。

エラーが発生した瞬間に関数が呼び出さ れた時点でアクティブになっていないコードだけを削除して関数を切り詰めると、同様にエラーは発生しません。

明らかにコンパイラのエラー - それはフォーラムに適合しないため、完全な関数を送信するために、開発者、誰。

 
フォーラムでは、コードの書式を歪めて しまい、修正することができません。
 
括弧をつけると、上記のような問題を 解決するのに奇跡的な効果があることがわかった。

class A{};

template<typename T>
class B{
public:
   B(int &){}
   B(long){}
   B(int, int, int){};  
   B(const B&){}
   B(const A*){}
};

// template class type
B<A*> test_b_class_class(){
   B<A*> b(1);
   int x = 22;
   
   return ( B<A*>(1));             // Fixed Compile Error: ambiguous call to overloaded function with the same parameters: "B(long)" and "B(const A*)"
   return ( B<A*>(1,2,3));         // Fixed Compile Error: only one argument is acceptable, argument should be castable to int
   return ( B<A*>(x));             // Fixed Compile Error: argument is passed by value instead of by reference.
   return ( B<A*>((A*)NULL));      // Fixed Compile Error: 'int' - invalid cast operation        
   return ( B<B<B<long>>>(1));     // Fixed Compile Error: OK, template parameter type does not provide any effort on compilation result
   
   return b;
};

B<A*>* test_b_ptr_ptr(){
   B<A*> b(1);
   
   return &( B<A*>(1));            // Fixed Compile Error: '&' - illegal operation use
   return &b;                 
};


void OnStart (){    
   // template class type
   B<A*> b0 = test_b_class_class();
   B<A*>* b_ptr = test_b_ptr_ptr();
}
 
Sergey Dzyublik:
括弧をつけると、上記のような問題を 解決するのに奇跡的な効果があることがわかった。

それしか書きようがない。

 
MT5のバグ(ビルド2345)テンプレート関数の戻り値が、テンプレート関数の引数型で与えられるテンプレートクラス内にある内部クラスである場合、コンパイルエラーと なる。

template<typename T>
class A{
public:
   class B{
   public:
      B(){};
      B(B&){};
   };
   
   A(){};
   A(A&){}
};

class C{
public:
   class D{
   public:
      D(){}
      D(D&){}
   };
};


template<typename T>
A<int>::B* test_b_ptr(const T n){             //OK
   A<T>::B* ptr = new A<int>::B();
   return ptr;
}

template<typename T>
A<int>::B test_b_in_place_class(const T n){   //OK
   return (A<T>::B());
}

template<typename T>
A<int>::B* test_b_in_place_ptr(const T n){    //OK
   return &(A<T>::B());
}


template<typename T>
A<T> test_a_template(const T n){              //OK
   A<T> a;
   return a;
}

template<typename T>
C::D test_d(const T n){                       //OK
   C::D d;
   return d;
}

template<typename T>
A<T>::B test_b_template(const T n){          //'A' - unexpected token, probably type is missing? 
   A<T>::B b;
   return b;
}



void OnStart (){ 
   test_b_ptr(1);
   test_b_in_place_class(1);
   test_b_in_place_ptr(1);
   
   
   test_a_template(1);
   test_d(1);
   test_b_template(1);                       // Compile Error
}
 
// "MetaTrader 5\MQL5\Files\Reports\2020.03.01 03.43.46ExpertName (琼㹤⸱㠰㐹㰷琯㹤琼㹤⼼摴㰾摴ㄾ〮ㄹ㔷⼼摴㰾摴㈾㄰⸹㠰ㄮ‴㈰〺㨰〰ㄮ㐱⼼摴㰾摴ㄾ〮〹㐵⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤㰰琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴 - )\"

このテキスト(Terminal logから取得)をMEにコピーし、カーソルを行末に移動させ、BackSpaceキーで文字を削除してみてください。再現性のあるバグがあるんです。

アニメーションでは、カーソルの位置に注意してください。BackSpaceを押すと、カーソルから遠い文字が削除されるのですが。


ZZY メモ帳ではすべてうまくいっていますが、MEではそうではありません。

検索文字列: Uluchshenie 012.
 
fxsaber:

このテキスト(Terminal logから取得)をMEにコピーし、カーソルを行末に移動させ、BackSpaceキーで文字を削除してみてください。再現性のあるバグがあるんです。


ZYメモ帳ではすべてうまくいっていますが、MEではうまくいきません。

ME Win10-64では問題なく削除されました。

全部コピーしたつもりなんですが、最後の文字があるんです。

摴 - )\"

ZY:MEのトリックがある、私は50KBの.mql4/mql5ソースファイルを持って、フォーラムで同じコードが5〜6KBを取る、私はトリックはエンコーディングにあると思うユニコード - "ユニコードではない" - 私はすでに覚えていない、ここで誰かが議論した。


UPD: MEメニュー:ファイル-名前を付けて保存-エンコーディングの一番下に、私はユニコードをデフォルトとします。

 
Igor Makanu:

UPD: MEメニュー:ファイル-名前を付けて保存-下のエンコード、私のデフォルトはUnicodeです。

下も同じです。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

fxsaber, 2020.03.01 16:10

アニメーションを開いて、カーソルの位置に気を配るようにしています。BackSpaceを押して、カーソルから遠い文字を削除しています。

 
fxsaber:

このテキスト(Terminal logから取得)をMEにコピーし、カーソルを行末に移動させ、BackSpaceキーで文字を削除してみてください。再現性のあるバグがあるんです。

アニメーションでは、カーソルの位置に注意してください。BackSpaceを押すと、カーソルから遠い文字が削除されるのですが。


ZY メモ帳では問題ないのですが、MEではダメなんです。

検索文字列: Uluchshenie 012.

最近、同じようなバグがありました。ただ、カーソルも失いました。MEを再起動したら、それっきり。Windowsがおかしいと思った。
 
Vladislav Andruschenko:
MEを再起動すると、それ以降は起こりませんでした。

再起動しても改善されない。