初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1320

 
pivomoe:

バージョン2981にアップデートした後、行にエラーが表示されるようになりました。

この線を交換する方法を教えてください。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5の特性、ヒントとコツ

イリヤス さん 2021.05.28 18:18

初期化シーケンス"{ ... "を拡張しています。次のビルドでは、定数だけでなく、任意の式を使用できるようにします。

この変更の代わりに、(通常の式と同様に)列挙型に対する定数の使用に制限が設けられます:定数が列挙型に属さない場合、対応するエラーが生成されます。

既存のコードを分析した結果、単一ゼロシーケンス"{0}"が誤って使用されることが多いことがわかった。

例えば、こんな風に。

MqlTradeRequest request={0};


この表記は、構造体の最初のフィールドに0を設定し、残りのフィールドをゼロにすることを意味する。

上記のコード行では、新しいルールによると、最初のフィールドのタイプがENUM_TRADE_REQUEST_ACTIONS、値 "0" を欠く列挙型 であるためエラーとなります。

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


というのが正しい方法でしょう。

MqlTradeRequest request={};

 
ありがとうございます。
 
Kira27:

そこで、私はこう書いています。「標準ライブラリのこれらのメソッドを使うには、どのクラスから自分のクラスを 継承すればよいのでしょうか?

私の質問のどこが悪いのでしょうか)))

 

これがそのコードです。何が問題なのでしょうか?

//+------------------------------------------------------------------+
//|                                            Test_Nasledovania.mqh |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CObject
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy  -- Метод Buy не высвечивается как подключеный
}
//+------------------------------------------------------------------+

クラスの内容は以下の通りです。


Test_Nasledovania : public CObjectクラス自体は、標準ライブラリ全体の基本クラスCObjectを 継承しています)。

 
Kira27:

これがそのコードです。何が問題なのでしょうか?

クラスの内容は以下の通りです。


Test_Nasledovania : public CObjectクラス自体は、標準ライブラリ全体のCObject 基底クラスを継承している)。

取引クラスを接続するだけでなく、取引クラスのオブジェクトを作成し、作成したオブジェクト を通じてクラスのメソッドを参照する必要があります

***
#include <Trade\Trade.mqh>
//---
CTrade         m_trade;                      // object of CTrade class
***
void OnTick()
  {
   m_trade.Buy(***
  }
 
Kira27:

私の質問のどこが悪いのでしょうか)))

なぜなら、ヘルプにはこれらすべてのクラスの継承が白黒で書かれているからです。

 
Vladimir Karputov:

取引クラスを接続するだけでなく、この取引クラスのオブジェクトを作成し、作成したオブジェクト を通じてクラスのメソッドを参照する必要があります

Expert Advisorやスクリプトでクラスメソッドを使うのは、もちろんオブジェクトの作成ですが、ベースクラスのメソッドを、子孫クラスで使うという質問です。なぜ、そこにオブジェクトを作る必要があるのか?

 
Kira27:

エキスパートアドバイザーやスクリプトでクラスのメソッドを使用する場合、オブジェクトを作成することは言うまでもありません。 しかし、ベースクラスのメソッドを子孫クラスの内部で使用する場合について質問します。なぜそこでオブジェクトを作成する必要があるのでしょうか?

CObjectから クラスを継承しています。

class Test_Nasledovania : public CObject

失礼ですが、どのような方法を期待されていたのでしょうか?

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Базовый класс CObject - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

以下は、オブジェクトを使用せずに継承クラス内でベースクラスのメソッドを使用する例です。

#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CTrade
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy
}
//+------------------------------------------------------------------+

に含まれるすべてのメソッドを使用したい。

私のクラスをどのクラスから継承すれば、オブジェクトを作成することなく、これらのクラスのメソッドを私のクラス内で使用できますか? もしそれが可能であればですが))

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Artyom Trishkin:

CObjectから クラスを継承していますね。

すみません、どんな方法を期待していたのでしょうか?

私は同意する))、私は愚かだった))、これらのすべてのメソッドのベースクラスは、その子孫のクラスのメソッドを使用することはできません)))