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

 
Alexandr Sokolov:

正規化しても正規化されていない値が表示される - MQL5

最も好ましくない1e-05, どうしたらいい?

DoubleToString(...)を使うと便利です。

 

上位のクラスから要素の値を取得するコツはあるのでしょうか?


コード

class B
  {
   int x
   int               GetA()
     { ????  }
  };

class A
  {
   int               a;
   B                 b;
public:
  };


クラスBの要素はクラスAの中にある。Bの中から(Aクラスの)aの値を取り出すにはどうしたらよいですか?

 
Sergey Likho:

上位のクラスから要素の値を取得するコツはあるのでしょうか?


コード


クラスBの要素はクラスAの中にある。Bの中にある(Aクラスの)aの値を求めるにはどうしたらよいでしょうか?

BクラスはAクラスについて何も知らない。
継承する必要がある。そうすると、子クラスから親クラスのメソッドを呼び出すことができます。コンテキスト解決演算子 : を使用した方が良い。
 
Sergey Likho:

上位のクラスから要素の値を取得するコツはあるのでしょうか?


コード


クラスBの要素はクラスAの中にある。Bの中から(Aクラスの)aの値を取り出すにはどうしたらよいですか?

class A;

class B
  {
   A*  ptr;
   int x;
public:
   B(int mX,A* mPtr):ptr(mPtr),x(mX){}
   void  Print() {Alert("From B\na=",ptr.Get(),"\nx=",x);}
  };

class A
  {
   int               a;
   B*                b;
public:
   A(int mA,int mB):a(mA),b(new B(mB,&this)){}
  ~A() {delete b;}
   void   PrintB() {b.Print();}
   void   PrintA() {Alert("From A\na=",a);}
   int    Get()   {return a;}
  };
  
void OnStart(){
   A a(8,10);
   a.PrintA();
   a.PrintB();   
  }
 
Artyom Trishkin:

アドバイスをお願いします。

MT5 windows 10 X64でインジケーターを呼び出す 問題を解決する方法を教えてください、私はこの方法でやっています。

#resource "㊙MyIndicator.ex5"

handle=iCustom(NULL,0,"::Indicators﹑MyIndicator")です。

以前は#resourceがなくても動作していましたが、#resourceがあるときだけ動作するようになり、現在は何も動作せず、エラー4804が発生します。

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Alexandr Sokolov :

正規化しても正規化されていない値が表示される - MQL5

最も好ましくない1e-05, どうしたらいい?

これを試してみてください。


if (index <= 65 && index> = 55 ) PrintFormat (index, "" , up, "" , down, "" , sum, "%.5f" , minus);
 
Sergey Likho:

上位のクラスから要素の値を取得するには、いくつかのトリックがあります。


コード


クラスBの要素はクラスAの中にある。Bの中にある(クラスAの)aの値を取得するにはどうすればよいですか?

class A;

class B
{
public:
   int x;
   int               GetA(A &reference) {  return reference.a;} };
//+------------------------------------------------------------------+
class A
{
public:
   int               a;
   B                 b; };
//+------------------------------------------------------------------+
A obj;
void OnStart()
{
   obj.a = 10;
   int result = obj.b.GetA(obj);
   printf("result = %d",result);
}
//+------------------------------------------------------------------+

2020.01.20 20:30:05.534 tst (EURUSD,H1) result = 10

 
Igor Makanu:

2020.01.20 20:30:05.534 tst (EURUSD,H1) result = 10

間違っている。メソッド内でオブジェクトへのポインタを渡す。私が言いたいのは、次のようなことです。

class A;

class B
  {
   A*  ptr;
   int x;
public:
   B(int mX,A* mPtr):ptr(mPtr),x(mX){}
   void  Print() {Alert("From B\na=",ptr.Get(),"\nx=",x);}
  };

class A
  {
   int               a;
   B                 b;
public:
   A(int mA,int mB):a(mA),b(mB,&this){}
   void   PrintB() {b.Print();}
   void   PrintA() {Alert("From A\na=",a);}
   int    Get()   {return a;}
   B*     GetB() {return &b;}
  };

void OnStart(){
   A a(8,10);
   B* b=a.GetB();
   b.Print();   
  }
つまり、AからBへのポインタを取得して作業することができ、BはAへのアクセス権を持つ
 
Vladimir Simakov:

間違っている。メソッド内でオブジェクトへのポインタを渡す。私が言いたいのは、こういうことです。

つまり、AからBへのポインタを取って作業することができ、BはAへのアクセス権を持っています

あなたのコードを拝見しました

しかし、質問者が「イチジクの葉を扱う」のは今回が初めてではなく、すでに一度OOPでこの質問にほぼ答えています ))))

彼は基本的にクラスAフォワードの説明を必要としているだけで、彼しか知らないのです)))


HH: オブジェクトへの参照を渡しています。その参照によって好きなことができますが、このようなコードには一般的に意味がありません。 通常は、あなたの例で書かれているように、自分へのクラスポインタを使って、それをすべて使うのが便利なのです

 
簡単なフリーのインジケータを書いたのですが、説明文が付けられません。必要事項をすべて記入し、「保存」を押すと、すべてOKで、エラーもありません。でも、ページが読み込まれた後、何の説明もない...。