MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1097

 
Seric29:

パラメータとして、関数へのポインタが渡される。クラスでこれを実現する方法は、誰も考えていないようですね。また、クラスへのポインタを返すべき理由も、まだよく分かっていません。

面白いサンプルがありますが、私の質問とは関係ありません。

私もガイドで似たようなものを見たことがありますが、手が痛いし、仕事もあるので、これらのサイトはすでに閉じています。

なんでこんな簡単な作業を変に弄らなくちゃいけないんだ。クラスオブジェクトを通して必要なデータを単純に取得することができます

参照、ポインタ、関数ポインタはよく知っているが、実際に使うことはほとんどない。また、一般的には、メモリ節約のためだけに必要だと思います。インジケータ付きのExpert Advisorはゲームではないので、グローバルスコープの 共通変数やクラスオブジェクトで管理することができます。

 
Alexandr Sokolov:

なぜ、そんな簡単なことをわざわざやるのか。クラスオブジェクトを通して必要なデータを取得するだけでいいのです

参照、ポインタ、関数へのポインタを使いこなしているが、ほとんど使っていない。私の考えでは、これらはメモリ節約のために必要なだけで、インジケータ付きのExpert Advisorはゲームではないので、グローバルスコープで 普通の変数やクラスオブジェクトを使用することができるのです。

単純な作業で派手なことはしたくないし、もちろん以前関数が呼ばれていたプログラムを修正したり、演算式を書いて計算を簡略化したり、簡略化したオーバーロード関数に切り替えたりするので、プログラムをクラスに変換したいのです。しかし、上に書いたように、ほとんど使わないし、今問題なのは、クラスはあるが、このクラスの関数へのポインタを作るのは不可能だ、なぜこんなプログラミングが必要なのか、一方をやると他方はできない、それはプログラミングではなく悪魔の所業だ、と。

 
Seric29:

単純な作業で派手なことはしたくないし、もちろん以前は関数が呼ばれていたプログラムをやり直したり、演算式を書いて計算を簡略化したり、簡略化したオーバーロード関数に切り替えたりするので、プログラムをクラスに変換したいんです。しかし、あなたが上に書いたように、それらを使用することはほとんどありませんし、今の質問は、クラスがありますが、このクラスの関数へのポインタを作成することは不可能です、なぜこの種のプログラミングが必要な、あなたは他のを行うことができない場合、それはプログラミングではなく、悪魔は何を知っている。

クラスは何らかのオブジェクトのテンプレートであり、このテンプレートにある機能を使うためには、まずオブジェクトを作成する必要があります。

要するに、クラス名はint、double、stringなどのデータ型として 機能するが、機能は拡張されているのである。変数の型を指定せずに変数を宣言することはできません。

その上、関数をクラスから切り離すだけで、オブジェクトを作成することなく、クラス内でもクラスと別でも使用することが可能です

 

インジケーターのファイルが該当フォルダから削除された以外に、インジケーターが動作しない理由はありますか? (ある端末ではインジケータがコンパイルされて動作するが、別の端末では動作しない)


 
Alexandr Sokolov:

クラスはあるオブジェクトのテンプレートであり、このテンプレートにある機能を使うためには、まずオブジェクトを作らなければならない。

実際には、クラス名はint、double、stringなどのデータ型として 機能するが、機能は拡張されている。変数の型を指定せずに変数を宣言することはできません。

その上、関数をクラスから切り離すだけで、オブジェクトを作成することなく、クラス内でもクラスと別でも使用することが可能です

ない限り。まあ、ただ、クラスというのは複雑なトピックで、参考書には転送、リンクやポインタの作成に関する例がたくさん載っているので、可能だと思います(少なくともc++では可能ですが、mql4はc++とは関係ありません)、その仕組みを理解することが必要です。授業で簡単な例を示す代わりに、余分な計算や情報を詰め込みすぎて、何を言っているのか理解できません。 よし、じゃあ、クラスから関数を引っ張ってこよう。

 
Alexandr Sokolov:

インジケーターのファイルが該当フォルダから削除された以外に、インジケーターが動作しない理由はありますか? (ある端末でコンパイルして動作するインジケータが、別の端末では動作しない)


マーケットから?

 
Alexandr Sokolov:

インジケーターのファイルが該当フォルダから削除された以外に、インジケーターが動作しない理由はありますか? (ある端末ではインジケータがコンパイルされて動作するが、別の端末では動作しない)


ターミナルとExpert Advisorのログにメッセージが表示される。

スクリーンショットは、このインジケータがソースコードを持っていないことだけを示しています。

 
Alexandr Sokolov:

インジケーターのファイルが該当フォルダから削除された以外に、インジケーターが動作しない理由はありますか? (ある端末ではインジケータがコンパイルされて動作するが、別の端末では動作しない)


追加ライブラリが必要なのかもしれない
 
Сергей Таболин:

マーケットから?

いいえ

イゴール・マカヌ

ターミナルとExpert Advisorのログにメッセージが表示される。

スクリーンショットは、このインジケータにソースがないことだけを示しています。

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

MakarFX
おそらく、追加のライブラリが必要なのでしょう

そのとおり、私が書いたのだから、わかるはずだ。

 

以下のMQL4テストスクリプトのコードで、コンパイラが警告を発生させる理由を教えてください。

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

27行目でデータ型の不一致に関する警告が発生しました。どちらの変数も同じint型です。以下は、スクリプトをコンパイルした画面です。

27行目を以下のように置き換えると

sig[j+1].age=(int)t;

という警告が表示されない。

その仕掛けとは?