Singelton MQL4 - страница 2

 

я создаю массив структур, в котором храню дынные для открытия ордера. так вот задача что бы не получилось перетирания этих данных или использования разных объектов класса

и потом беру данные из этого массива и открываю ордера, таким образом можно зараз наполнить массив данными, и дальше он сам будет открывать ордера.

 
class OrdersStack{
   private: 
   public:
}; 

OrdersStack stack;

Пусть это будет в отдельном файле. Подключить файл к эксперту и использовать stack. Везде использовать stack.

 

а такой вариант

class Singleton{
    private: 
    public:
}; 
static Singleton instance;

я так понимаю позволит обратиться к объекту класса через Singleton::instatnce.someMethod(). правильно понял?

 
TheXpert:

Ну нельзя же настолько слепо сдирать...

Во-первых с приватным конструктором в MQL таки будут проблемы скорее всего.

Во-вторых в примере

Для этих функций если вы не заметили есть только объявления, без имплементации. Это нужно для того чтобы компилятор ругался при попытке их использовать и в то же время не мог их создать автоматически. В MQL такое опять же не прокатит.

В-третьих про ссылки в MQL можете забыть. Их нет и не будет

Слепой учит глухого. Вы бы прежде чем поучать хоть несколько строк на MQL++ написали.

В общем вот вам сингельтон в стиле MQL:

class Singleton
{
private: 
    Singleton(){;}
    static Singleton*  instance;
public:
    static Singleton* getInstance()
    {
        if(instance == NULL)
           instance = new Singleton();
        return GetPointer(instance);
    }
    bool AddTask(void){return true;}    
}; 

int OnInit()
{
   Singleton* inst = Singleton::getInstance();
   inst.AddTask();
   return INIT_SUCCEEDED;
}

 
dmmikl86:

а такой вариант

я так понимаю позволит обратиться к объекту класса через Singleton::instatnce.someMethod(). правильно понял?


Нет. Сразу к методам класса. stack.method();

 
C-4:

Слепой учит глухого. Вы бы прежде чем поучать хоть несколько строк на MQL++ написали.

В общем вот вам сингельтон в стиле MQL:


при компиляции выдало ошибку

unresolved static variable 'Singleton::instance'
 

как бы я понимаю что тип не определен и переменной instance нужно присвоить значение. (что то вроде такого)

class Singleton
{
private: 
    static Singleton* instance;
    Singleton(){
       instance = new Singleton();
    }
public:
    static Singleton* getInstance()
    {
        if(instance == NULL)
           instance = new Singleton();
        return GetPointer(instance);
    }
    bool AddTask(void){return true;}    
}; 

но все равно компилятор ругается!!
помогите как определить переменную?
 
dmmikl86:

как бы я понимаю что тип не определен и переменной instance нужно присвоить значение. (что то вроде такого)

После определения.

Singleton* Singleton::instance = NULL;

 
C-4:

В общем вот вам сингельтон в стиле MQL:

Его удалить можно, не канает.
 
TheXpert:

После определения.

Singleton* Singleton::instance = NULL;




при таком раскладе ругается на знак "=" и все также unresolved static variable.

я завтыкал про вариант NULL, но если только ставишь знак "=" сразу выскакивает ошибка : '=' - illegal assignment use

Причина обращения: