Скачать MetaTrader 5

Как правильно вызвать базовый параметрический конструктор из класса потомка?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vasiliy Sokolov
26387
Vasiliy Sokolov  

Собственно имеется базовый класс с единственным параметрическим конструктором требующих два аргумента

Когда призводный класс пытается наследоваться от базового, компилятор выдает ошибку: 'CBaseClass - wrong parameters

class CBaseClass
{
   private:
      int m_a;
      int m_b;
   public:
      CBaseClass(int a, int b)
      {
         m_a = a;
         m_b = b;
      }
};

class ChClass : CBaseClass
{
   int m_c;
};
Konstantin Chernov
9339
Konstantin Chernov  
C-4:

Собственно имеется базовый класс с единственным параметрическим конструктором требующих два аргумента

Когда призводный класс пытается наследоваться от базового, компилятор выдает ошибку: 'CBaseClass - wrong parameters

 

class ChClass:public CBaseTrade


Vasiliy Sokolov
26387
Vasiliy Sokolov  
Konstantin83:

class ChClass:public CBaseTrade


Вызов параметрического конструктора это не отменяет. Код не будет компилироваться.
Dmitriy Skub
12263
Dmitriy Skub  
C-4:

Собственно имеется базовый класс с единственным параметрическим конструктором требующих два аргумента

Когда призводный класс пытается наследоваться от базового, компилятор выдает ошибку: 'CBaseClass - wrong parameters

 

У Вас базовый конструктор с параметрами, поэтому обойтись конструктором "по умолчанию" в потомке не получится.

Только вот так:

class ChClass : public CBaseClass
{
   int m_c;
   ChClass(int a, int b)
   :
   CBaseClass( a,  b)
   {
   }
};
Комбинатор
16453
Комбинатор  
C-4:
class ChClass : CBaseClass
{
public:   
   ChClass()
      : CBaseClass(0, 0)
   {}

private:
   int m_c;
};
Вроде так. Если что, курить список инициализации вот тут
Yedelkin
4532
Yedelkin  

А так работает?

public:
      CBaseClass(int a, int b): m_a(a),m_b(b) {};

 

Комбинатор
16453
Комбинатор  
Yedelkin:

А так?

А так правильней, кстати.
Yedelkin
4532
Yedelkin  

Всё же есть в Справочнике:

//+------------------------------------------------------------------+
//|  базовый класс                                                   |
//+------------------------------------------------------------------+
class CFoo
  {
   string            m_name;
public:
   //--- конструктор со списком инициализации
                     CFoo(string name) : m_name(name) { Print(m_name);}
  };
//+------------------------------------------------------------------+
//|  потомок класса CFoo                                             |
//+------------------------------------------------------------------+
class CBar : CFoo
  {
   CFoo              m_member;      // член класса является объектом предка
public:
   //--- конструктор по умолчанию в списке инициализации вызывает конструктор предка
                     CBar(): m_member(_Symbol), CFoo("CBAR") {Print(__FUNCTION__);}
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   CBar bar;
  }

 

Vasiliy Sokolov
26387
Vasiliy Sokolov  
Yedelkin:

Всё же есть в Справочнике:

Я не смог найти. Все спасибо - заработало.
Dmitiry Ananiev
8270
Dmitiry Ananiev  

Чтоб не засорять форум тут же спрошу. 

При торговле валютами пользовал базовый класс CTrade. Все работало.

Стал писать эксперта под Брокерский дом Открытие - не выставлялись ордера из-за типа заполнения ордера - нужно было выставить ORDER_FILLING_RETURN.   

пришлось самому заполнять всю структуру... Как это сделать правильно с помощью ООП ?  

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
Yedelkin
4532
Yedelkin  
dimeon: При торговле валютами пользовал базовый класс CTrade. Все работало.

Стал писать эксперта под Брокерский дом Открытие - не выставлялись ордера из-за типа заполнения ордера - нужно было выставить ORDER_FILLING_RETURN.   

пришлось самому заполнять всю структуру... Как это сделать правильно с помощью ООП ?  

 Помощь ООП не потребуется :) См. готовый метод: Справочник MQL5 / Стандартная библиотека / Торговые классы / CTrade / SetTypeFilling
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий