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

 

なぜコンパイラはintとcolorの違いを見抜けないのでしょう。

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

機能を再定義すると、叱られる(ペダルの混在に注意と)。

'CreateLabel' - ambiguous call to overloaded function with the same parameters
デフォルトのパラメータがあればいいのですが、曖昧さがないので、渡されたパラメータの型を定義して先に進むだけです。
 
Urain:

なぜコンパイラはintとcolorの違いを見抜けないのでしょう。

機能をオーバーライドすると、悪態をつく(ペダルが混ざらないように注意と書いてある)。

デフォルトのパラメータがあればいいのですが、曖昧さがないので、渡されたパラメータの型を定義して行けばいいのです。
この場合、コンパイラは、同じ名前の関数を2つ作ったことに文句を言っているのであって、渡されたパラメータは何の関係もないのです。
 
sergey1294:
この場合、コンパイラは「同じ名前の関数を2つ作ったが、渡したパラメータは関係ない」と文句を言います。

その場合、「オーバーロード」という言葉の意味を読んでください。

SZだけでなく、「関数のオーバーロード」。

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

エラーやバグではなく、誰が何を提案できるのか、ライティングの友に質問です...。

クラス内のポインタの名前を取得したいのですが、うまくいきません。

一般的に、問題の本質は、グラフィカル・オブジェクトの string-nameが自動的に割り当てられたかったということです。

自動的に文字列名を取得したい。

クラスメソッドからグラフィカルオブジェクトをインストールする場合、カーソルに応じた名前を自動的に割り当てる必要があります。

まだやり方が分からないので、一からやり直せばいいと思うんです。


理論的には、オブジェクトに自動的に名前を付ける方法は主に2つあります(実装する場合は、様々なバリエーションがあります)。

1.名前の生成は、番号付きリストに基づいて行われます

別のクラスがオブジェクトの命名を行い、「分子」(すべてのオブジェクト用か、特定のオブジェクトのグループ用かのどちらか)を管理します。

この場合、名称は、(好ましくは)オブジェクトの種類、シンボルの名称(通貨ペア)、TFのテキスト表記、オブジェクトのシリアル番号(分子より取得)を基に形成される。

この場合、実装によっては、チャート上のオブジェクトの存在を追跡できる場合とそうでない場合があります。

2.名前は、オブジェクトの作成日時に基づいて形成される。

この方法による名称は、オブジェクトタイプ、シンボル名、テキスト表記TF、キー(日付と時刻を基にした表記)を基に形成することができる。

追記

最初のバリエーションでは(私の意見では)、クラスとオブジェクト管理のフルサイクル(作成、変更、削除)で実装する方が合理的だと思うのですが......。

 
Urain:

その場合、「オーバーロード」の意味を読んでください。

ZS さて、「関数のオーバーロード」と同様に。

そんなことがあるんですね。
 
sergey1294:
こんなことができるなんて知らなかった。

ポリモーフィズムと関数のオーバーロードは、自尊心のある言語には必ずあるべき、基本的なOOPの原則です。

ポリモルフィズム

ポリモーフィズムとは、同じ名前の関数(メソッド)が、どのクラスオブジェクトを使ってメソッドを呼び出すかによって、異なるプログラムコード(ポリモーフィックコード)に対応する現象である。ポリモーフィズムは、祖先クラスのメソッドの実装を子孫クラスで変更し、メソッドのシグネチャを 強制的に保持することで確保されます。これにより、親クラスのインターフェイスが 変更されることなく保持され、異なるクラスのコードでメソッド名をリンクすることが可能になります - 与えられた名前のメソッドは、呼び出し元のクラスのオブジェクトから取得されます。このメカニズムは、コンパイル時に行われる静的な(早い)バインディングとは対照的に、動的な(または遅い)バインディングと呼ばれています。

関数のオーバーロード

手続きや関数のオーバーロード:プログラミング言語において、手続きや関数という同じ名前のサブプログラムを使用する機能。


トレードクラスの標準ライブラリ、クラスCAccountInfo からの例です。

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

尊敬するMetaQuotesに長い時間をかけて相談し、不具合があることを証明したところ、「不具合はない」と言われました。

しかし、私は自分の意見を貫き、「コミュニティに聞いてみたらどうか」とアドバイスされました。

そこで、インジケータと、インジケータの値を取得するExpert Advisorを用意しました。

EURUSDのテスターを2010年07月01日から2010年07月02日までМ1で起動します。

ログを見ると、一方のバッファの値が変化し、もう一方のバッファの値は変化していないことがわかる。

これが1時間続き、その後2番目のバッファが生きているのですが、インジケーターの値を見ると一致していません。

アカウントを変えて履歴を再ポンプしてみたりもしましたが、それでもダメでした。

私のターミナルへのリンクは、rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar、 すべてそこにセットアップされています。

そして、添付ファイルのアドバイザーを使ったインジケーター

エラーが発生したコードを送信しました。当然ながら、間違った情報を出しているのはあなたのコードです。間違いを正すという私たちの指摘を無視し、毎回新しいコードを提示し、その都度、間違いを指摘する。
 
Urain:

なぜコンパイラはintとcolorの違いを見抜けないのでしょう。

機能をオーバーライドすると、悪態をつく(ペダルが混ざらないように注意と書いてある)。

OK、デフォルトのパラメータもあるだろうが、曖昧さはなく、渡されたパラメータの型を定義して進めばいいだけだ。
本当に問題があるのですね、調べます。
 
Urain さん、メッセージありがとうございます。誤記を修正しました。
 
stringo:
エラーとなるコードを提供しています。当然ながら、これはあなたのコードが間違った情報を与えているのです。同時に、エラー修正に関する私たちのコメントも無視し、毎回新しいコードを提示し、その都度エラーを出していますね。

しかし、もし「同期を取らずに、コードに組み込むべきだ」と言われたら...。

それどころか、頑なに「全部一致する」と言い続けましたね。

ただし、TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) を除く。の代わりに TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) を指定します。

これは確かにエラーですが、ポイントには影響しませんでした。

もう一度、指標を作って、自分がどれだけ間違っていたかを確認します。

つまり、すべてが一致し、Expert Advisorのコードを修正したと言うことですね。しかし、実際には何も一致せず、インジケータのコードを修正する必要があります(同期を統合するため)。