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

 
Alexey Kozitsyn:
プログラミング地獄への 道はグローバル 変数で舗装されて いる」(Steve McConnell)
この警告が出ない例のみ掲載しています。変数をグローバル変数にするかローカル変数にするかは、プログラマーのセンスと経験の問題である。
 
Ilyas:
ローカル変数やグローバル変数(単純型やコンストラクタのない「複雑型」)を実際に使用しない場合の警告を追加する予定ですが、このタスクの優先度は低いです。
了解しました、ありがとうございます。念のため、ここで開発者の注意を 喚起しておこう。
 
Alexey Kozitsyn:
PC1台につき1回のアクティベーションが可能です。端末の数は問わない。
どこかに確認はありますか?
 
Vladimir Pastushak:
どこかに確認はありますか?

購入者は、本製品の購入またはレンタル時にベンダーの指定する回数だけ本製品を起動する権利を取得するものとします。例えば、購入時に本製品に対して20のアクティベーションが許可されている場合、売主がその後この数を減らしたとしても、買主は20の異なるハードウェア構成に 本製品をインストールすることができます。

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
この投稿では、写真の解像度を自動的に元のサイズ(バイト)の最大6倍まで下げています。なぜ?
 
Alexey Kozitsyn:
スラワさん、こんにちは!ライブラリ(上の質問)についてコメントをお願いします。

それが修理の方法です。

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

これで解決

はい、ありがとうございます、それが最適です。図書館に。エラー4024はどうですか?
 
Slawa:

それが修理の方法です。

こんなことして何になるんだ? 標準ライブラリは、ユーザーの好きなように使うのではなく、その構造の思想に厳格に従わなければならない。Alexey Kozitsynは 使い方が間違っていて、そのせいで出力にバグが多発するんです。CCartオブジェクトを作成した後、Attachメソッドを使ってチャートをクラスのオブジェクトに添付するだけです。このメソッドはオーバーロードされ、現在のチャートと必要なチャートの両方を添付することができます。Openメソッドに変更すると、現在のチャートで作業する機能が失われます。

そして、標準ライブラリの開発者への要望ですが、ライブラリの構造についての記述をお願いします。多くの人はそれを理解せず、間違いを犯し始め、それに付き合って、今までのものをすべて壊し始めてしまう。

 
Alexey Kozitsyn:

MT4標準ライブラリに関する 質問です。

Chart.mqhファイル

チャートを開きたいのですが。Open(const文字列 symbol_name,const ENUM_TIMEFRAMES timeframe)というメソッドを使っています。

1.使用できないシンボルを使用した場合、ChartOpen()関数はエラー#4024 - 内部エラーを返します。確かに内部的なエラーかもしれませんが、もっと正確なエラーコードとして「#4106 - unknown symbol」があります。返されるエラーコードを変更した方が良いのでは?4024は開発者にエラーの場所を何も教えてくれないので。

2.失敗した場合、ChartOpen() は m_chart_id フィールドに値 0 を割り当てます。つまり、現在のチャートで作業を開始することになりますが、これは正しくありません。その結果、Detach()メソッドを呼び出さない場合、現在のチャートは作業終了後に単に閉じてしまうことになります。また、このやり方は間違っていると思います。ChartOpen()関数は、エラー時に-1を返すようにした方がよいでしょう。

チャートを操作する前に、Attachメソッドを使ってクラス・オブジェクトにアタッチする必要があります !!!もし、現在のチャート( 0 )で作業したくない場合は、このチェックを実装し、作業中に現在のチャートを使用することを禁止してください。

また、チャートで作業して、終了するためにDetachメソッドを使って閉じないとはどういうことでしょうか?クラスのデストラクタやOnDeinitに一行書くのは本当に難しいのでしょうか?モノを扱う仕事は厳密な管理が必要で、そうすれば失敗は避けられます。

 
coderex:

こんなことして何になるんだ? 標準ライブラリは、ユーザーが望むように使うのではなく、その構造の思想に厳格に従って使われるべきものである。Alexey Kozitsynは 正しい使い方をしないので、出力に多くのバグが出るんです。CCartオブジェクトを作成した後、Attachメソッドを使ってチャートをクラスのオブジェクトに添付するだけです。このメソッドはオーバーロードされ、現在のチャートと必要なチャートの両方をアタッチすることができます。Openメソッドに変更すると、現在のチャートで作業する機能が失われます。

そして、標準ライブラリの開発者への要望ですが、ライブラリの構造についての記述をお願いします。多くの人はそれを理解できずに失敗を重ね、自分もそれに倣って、今までやってきたことをすべて壊し始めているのです。

上にはっきり「やる意味があるのか」と書きました。チャートを開く際にエラーが発生した場合(例えば無効なシンボルを設定した場合)、何らかの理由で、Attach(void) メソッドと類推して、Open() メソッドは現在のチャート識別子をオブジェクトにバインドします。なぜ、そんなことをしなければならないのか。現在のチャートを操作したい場合は、Attach(void)メソッド { m_chart_id=ChartID(); } を呼び出すと、それだけで済みます。しかし、ここで私は、なぜか間違ったものを使って作業を始めてしまうという、明らかに誤った状況に陥ってしまったのです。一般的にはChartOpen()関数自体の問題ですが、変更しないのだから、せめてライブラリで変更できるようにしてほしいです。

もう一つの主張。論理的に考えてください。このメソッドはOpen()と呼ばれます。新しい何かが開かれることを暗示しているのですそして、この新しいアイテムで仕事を始めることになるのです。しかし、ここでは古いものを使って作業しています。論理が見えない。そして、あなたはこの不正確さを自分の目的のために利用しているように見えます。

このメソッドはオーバーロードされ、現在のチャートと必要なチャートの両方をバインドすることができます。また、Openメソッドへの変更により、現在のチャートで作業する機能が失われます。

何を殺すのか?Attach()メソッドはまだ残っており、これまでと同じように動作します。おっしゃるとおり、Open()関数の戻りIDを確認し、0以下であれば、Attach(void)メソッドを呼び出すようにしてください。以上です。ただ、Attach(void)メソッドを呼んで、現在のチャートを添付すればいいだけなのに、なぜこんな面倒なことをする必要があるのか、理解できません。

おそらく、私はあなたを理解していないのでしょう。では、例を挙げてください。

また、標準ライブラリの開発者にも、ライブラリの構造に関する記述をお願いします。多くの人がそれを理解せず、間違いを犯し始め、それに付き合って、自分がやってきたことをすべて壊し始めてしまうのです。

なんて声高に言うんだろう・・・。自分が人より賢いと思ってはいけない、そうならないかもしれない。