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

 
Alexey Rassvetnyy:

このバグの修正をお願いします。MQL5では、ENUM_CHART_PROPERTY_DOUBLEやENUM_CHART_PROPERTY_STRINGなど、一部の組み込み列挙型を汎用パラメータとして使用することができません。

カスタムenumの組み込みなどには問題ありません。

enumには値が0の要素がないため、この問題が発生します。このコンパイルエラーを 発生させるenumを自作することに成功しました。

#include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=-10, ENUM2
};
void OnStart()
  {
   CHashMap<ENUM_CHART_PROPERTY_INTEGER,int> mapI;    // эта срока комилируется без ошибок
   CHashMap<ENUM_CHART_PROPERTY_DOUBLE,double> mapD;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<ENUM_CHART_PROPERTY_STRING,string> mapS;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM,double> mapE;    // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2,double> mapE2;    // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy:

enumにnull値を持つ要素がないため、この問題が発生します。なんとか独自のenumを作成し、このコンパイルエラーを 発生させています。

あなたの場合、ライブラリファイルを修正することで解決します

//+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA:

あなたの場合、ライブラリファイルを修正することで解決します

ありがとうございます、うまくいきました。

しかし、MQに対応したファイルを手作業で修正すると、次のアップデートでその変更がロールバックされます。標準ライブラリの 開発者は、標準ライブラリのコード全体でNULLをパラメトリック型にキャストオフするようにするか、コンパイラでNULLを明示的に指示しなくても自動的に任意の型にキャストできるようにする必要があります。

 
Alexey Rassvetnyy:

標準ライブラリを サポートする開発者は、標準ライブラリのコード全体でNULLをパラメトリック型にキャストするか、明示的な指示がなくてもNULLが自動的に任意の型にキャストされるようにコンパイラを強化する必要があります。

開発者には、「シンプルであればあるほど良い」という原則があります。まあ、アセンブラではないので、使ってもいいかもしれません。そういうものなのかもしれません。

 
DMITRII PECHERITSA:

あなたの場合、ライブラリファイルを修正することで解決します

メッセージをありがとうございました。

SBでこのような修正を行いました。

 
Ilyas:

メッセージをありがとうございました。

SBでこのような修正を行いました。

キーだけでなく、値も修正?

 
Stanislav Korotky:

キーだけでなく、値も修正?

はい、バリューにも

 
Ilyas:

デバッガで構造体の内容を表示する際、観測されるフィールドの一部を削除することは可能でしょうか?


大きな建造物がいくつもある。5つのフィールドで、目で見て比較する必要があります。うまくいかないんです。

 

こんにちは!この問題を解決するために、私を助けてください。

MT5-advisorでトレードリクエストを送信してチェックする前に、私はtype_fillingの 定義の以下のバリエーションを使用しています。

// тип FILLING
int SYMBOL_FILLING = (int)SymbolInfoInteger(iNameSymbol, SYMBOL_FILLING_MODE);
switch(SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK:   iЗапрос.type_filling = ORDER_FILLING_FOK;    break;
   case SYMBOL_FILLING_IOC:   iЗапрос.type_filling = ORDER_FILLING_IOC;    break;
   default:                   iЗапрос.type_filling = ORDER_FILLING_RETURN; break;
}

しかし、この構築はすべての口座、すべてのブローカーで機能しないことが判明し、問題に直面しました。 OrderCheckでレディリクエストを確認すると、エラー10030(Anunsupported orderexecution type by balance is specified)が表示されます。この場合、SYMBOL_FILLING = 3、ORDER_FILLING_RETURN タイプが選択される。

外部ライブラリ(CTradeなど)は使っていません。私の質問に対する答えを得るために、私を助けるか、または私を導く方法を教えてください。

ありがとうございました。

 
fxsaber:

デバッガで構造体の内容を表示する際、観測されるフィールドの一部を削除することは可能でしょうか?


大きな建造物がいくつもある。5つのフィールドで、目で見て比較する必要があります。うまくいかないんです。

最良の方法は、マウスオーバーで変数の値をソースに表示することです。そうすれば、ウォッチリストに何も追加する必要がなく、任意のネストの フィールドを、(近隣のフィールドも)再参照の連鎖なしに利用 できます。