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

 
comp:

例えば、現在ObjectSetIntegerの記述で

であるべきです。

すべての記事を最後までお読みください。

prop_id

[in] オブジェクトプロパティの識別子。ENUM_OBJECT_PROPERTY_INTEGER 列挙の値のいずれかとすることができる。

すでにお話したとおりです。サーベルを手にすることなく、ドキュメントを注意深く読んでください。
 
Slawa:

スレッドを最後まで読む

もう言ったでしょ?サーベルを手にすることなく、ドキュメントをよく読んでください。

VERYを最後までよく読んでください。引用元はこちら

オブジェクトのプロパティの識別子。ENUM_OBJECT_PROPERTY_INTEGERenumeration の値のいずれかを 指定 する

であるべきです。

オブジェクトのプロパティ識別子。ValueENUM_OBJECT_PROPERTY_INTEGERenumeration の値の一つ なければならない

この型に明示的なゴーストが必要なことは、5でコンパイルされた唯一のバリアントで 確認されています(自分で確認してみてください)。このゴーストがない場合、コンパイラは対応するオーバーロードがないことを訴えます

 
このトリックは知りませんでした。mq4ファイルを5つのメタエディタで開くと、ex4にコンパイルされるのです
 
ワンコンパイラワンエディタ
 

つまり、読み終わったときに 「この値はENUM_OBJECT_PROPERTY_INTEGERという 列挙型の値のいずれかである可能性が ある」と思ったのですあるいは、そうでない場合もあります。また、may not beはドキュメントに明記されていないので、禁止されていないものは許可されます。社会生活の原理をプログラミングに拡張しているのですから」。

そういえば、この関数のパラメータを設定するとき、MetaEditorは対応するパラメータの型をどう伝えたのでしょうか?

 
MQLのヘルプには曖昧な点が多くあります。そういう意味では、コンプの言う通り、ヘルプの読み方の解釈は少ない方がいいんです。
 
Slawa:

つまり、読み終わったときに 「この値は列挙型ENUM_OBJECT_PROPERTY_INTEGERの 値のいずれかである可能性が ある」と考えるのですあるいは、そうでない場合もあります。また、may not beはドキュメントに明記されていないので、禁止されていないものは許可されます。社会生活の原理をプログラミングに拡張しているのですから」。

いや、そんなことはないだろう。MT4で正しくコンパイルされたコードであれば、MT5でも正しくコンパイルされるはずだと思ったからです。そうでないときは、調べ始めたんです。MT4とMT5でコードを確認し、確認してください。

class CHARTOBJECT
{
public:
  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(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

そういえば、この関数のパラメータを打ち込むとき、MetaEditorは関連するパラメータの種類をどう伝えたのだろうか。

上にあげた仕様で正しく補正してくれました。ドキュメントではintになっています。

 
comp:

いや、そんなことはないだろう。MT4でエラーなくコンパイルされるのであれば、MT5でもエラーなくコンパイルされるはずだと思ったのですが。そうでないときは、調べ始めたんです。MT4とMT5でコードを確認し、確認してください。

なぜ?

MT4とMT5は本質的に異なるアーキテクチャを持つ

MQL4を古い構文から新しい構文(MQL4+と呼ばれるもの)に翻訳する際、列挙を含め多くのものが欠けている古いMQL4の構文を振り返る必要がありました。

 

1週間だけ読んでみよう。書く人ではなく、読む人になりましょう。

ここで話していることはすべて、このフォーラムだけでなく、MQL4.comでも何度も議論されてきたことです。

 
Slawa:

それはなぜでしょうか?

MT4とMT5では、最初からアーキテクチャが異なる

MQL4を古い構文から新しい構文(MQL4+と呼ばれるもの)に移行する際、列挙を含め多くのものが欠けていた以前のMQL4構文を振り返る必要がありました。

長い間、議論をしても成功することはない。実は、ドキュメントがintではなく、関数名を入力するときのヒントのようになっていれば、コンパイラに叱られた原因がすぐにわかったのですが(テンプレートを使った例ではわからなかった)。なぜなら、ドキュメントによると、コードはそこにintと "can "としてコンパイルされているはずだからです。ドキュメントとツールチップを一致させることを阻むものは何なのか--。しかし、誤解が生じた場合は、ドキュメントではなく、ツールチップに表示されている内容を見た方が良いということを、今後覚えておこうと思います。