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

削除済み  

こんな感じで、性能的にはどっちがいいんだろう。

  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

それとも、メソッドをオーバーロード することによって?

 
zaskok3:

こんな感じで、性能的にはどっちがいいんだろう。

それとも、メソッドをオーバーロード することによって?

性能面では、どちらのソリューションにも違いはありません。)
削除済み  
coderex:
どちらのソリューションにも適材適所があります。)

ありがとうございました。もうひとつ質問です。

構造体のconstフィールドのポイントは何ですか?そのような構造体は、渡すことさえできない(コンパイラの悪態やスタックのオーバーフロー)?

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


構造体の代入演算子をオーバーロードする ことは、実際には不可能です(無限再帰のため、意味はあります)。では、なぜ構造体の中にフィールドがあるのでしょうか?

 
Karputov Vladimir:

Windows 10 x64では、1241ビルドでこのエラーに遭遇したことはありません。Unfold」コマンドを実行すると、グラフィックウィンドウが穴のない状態で完全に展開されます。

おそらく、OSの内部で何らかの設定が変更されているのでしょう(OSのデフォルトを切り詰めたり、レジストリを掃除したりするのが趣味なのかもしれませんが・・・)。

マウスでガラスをドラッグする場合は、この時点で「Shift」または「Ctrl」「Alt」のいずれかを押してください。

私の最善のアドバイスは、詳細な説明、独自のコード(目盛りを表示する)、スクリーンショットを添えて、serviceDeskに書き込むことです。

>> おそらく、オペレーティングシステムの内部で何らかの設定を変更したのでしょう(オペレーティングシステムの標準機能、またはレジストリクリーニングなどをカットすることに熱心なのかもしれません)。

私はそういうことに興味はない、システムはクリーンだ

>> ここで私は、ServiceDeskへのアプリケーションを 作るために、詳細な説明、あなたのコード(チックを示す)、スクリーンショットであなたに助言することができます。

で、これはどこかというと、この支店がサーヴァーじゃないですか。

削除済み  

同様の内容を含むmqh-fileを#includeでインジケータに含めると。

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

指標自体のコンパイルの段階でエラーがないこと。しかし、mqhとは別に発生する(上記参照)。

コンパイラがプラグインされたmqhで複数回文句を言わないように、MT4でこのプロパティのインジケータの値を見つけるにはどうしたらいいですか?

 

MQL5とMQL4で同じようにアプリケーションが動作するようにしようとしています。

MQL4でsinput 変数を導入する際に、関数ParameterSetRange()とParameterGetRange()を言語に追加し忘れたのではないでしょうか?

MQL4のドキュメントでは、ParameterSetRange()およびParameterGetInput() として登場しています-https://docs.mql4.com/basis/variables/inputvariables#sinput

が、コンパイラはそれを受け入れない。

残念ながら、これらの関数がないと、sinput変数の面白さはすべて失われてしまいます。

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
削除済み  
zaskok3:

ありがとうございました。もうひとつ質問です。

構造体のconstフィールドのポイントは何ですか?そのような構造体は、渡すことさえできない(コンパイラの悪態やスタックのオーバーフロー)?


構造体の代入演算子をオーバーロードする ことは事実上不可能です(無限再帰のため、意味はあります)。では、なぜ構造体の中にフィールドがあるのでしょうか?

お楽しみください。

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
削除済み  
Koldun Zloy:

お楽しみください。

本題に入るのはいいことです!ありがとうございました。コンストラクタをオーバーロードする前になぜ自分で気づかず、代入演算子に入って しまったのか、今でも不思議でなりません。結局のところ、解決策は明らかなのです
削除済み  

MT4端末のフォルダを別ドライブに移動しました。以前はポータブルキーで動かしていました。今回も同じことをしました。

端末が一斉にサーバーに接続された。以前は、端末のフォルダを 移動すると、パスワードが保存されず、再入力しなければなりませんでした。今(ビルド950)はそれがないんです。

これは普通(私だけ)なのでしょうか?

 
zaskok3:

性能面から見て、これ以上の方法はないでしょう。

もちろんオーバーロード。