Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1098

 
Grigori.S.B:

Подскажите пожалуйста почему компилятор выдает предупреждение в следующем MQL4 коде проверочного скрипта:

Предупреждение в строке 27 о несоответствии типов данных. Обе переменные имеют одинаковый тип int. Ниже скриншот компиляции скрипта.

Если же строку 27 заменяю на 

то предупреждение пропадает. 

В чем фокус? 

А никакого фокуса. Переменная t объявлена типа double

Да и вообще, эта t нигде не принимает никакого значения.

 
Alexey Viktorov:

А никакого фокуса. Переменная t объявлена типа double

Спасибо большое, заработался - отдыхать пора.

Alexey Viktorov:

Да и вообще, эта t нигде не принимает никакого значения. 

Это буферная переменная, используемая для временного хранения результата при сортировке.

 

Чем отличаются эти методы инициализации?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. описание типа (класса)

2. объявление указателя на тип (класс)

3. объявление экземпляра класса - это инициализация, т.к. будет вызван конструктор Klas() если он не описан, то будет вызван конструктор по умолчанию - справка в помощь

Seric29:

Чем отличаются эти методы инициализации?

т.е. инициализация только пп.3 

 
Igor Makanu:

1. описание типа (класса)

2. объявление указателя на тип (класс)

3. объявление экземпляра класса - это инициализация, т.к. будет вызван конструктор Klas() если он не описан, то будет вызван конструктор по умолчанию - справка в помощь

т.е. инициализация только пп.3 

А зачем инициализировать через указатель, в справке я вообще этого не видел как их инициализировать может смотрел и не понял, т.к. классы плохо описаны в справке читал 30 раз.

Да действительно после класса как у меня записей нет но за-то в ОнСтарт налепили вот этот код

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Как хочешь так и понимай. Зачем так объяснять.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

Зачем этот указатель не понятно.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

а это для чего что хочешь то и думай

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

а это что означает тоже не понятно.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
Для чего это нужно тоже не понятно. Взяли бы не грузили а расписали идею нормально и просто.
 

Приветствую. 

Подскажите, пожалста, как рассчитываются горизонтальные уровни для сетки в мт4 и в мт5?

 
Seric29:

А зачем инициализировать через указатель, в справке я вообще этого не видел как их инициализировать может смотрел и не понял, т.к. классы плохо описаны в справке читал 30 раз.

указатель это указатель, инициализация это инициализация

разберитесь в этом коде для начала:

1. int a;
2. int a = 5;

что в этом коде инициализация, а что объявление переменной?

когда выделяется память?

а потом уже с этим знанием подойдите к теме ООП и указателей на класс и указателей на объект


ушел, почему то не могу отвечать на элементарные вопросы

 
Igor Makanu:

указатель это указатель, инициализация это инициализация

разберитесь в этом коде для начала:

что в этом коде инициализация, а что объявление переменной?

когда выделяется память?

а потом уже с этим знанием подойдите к теме ООП и указателей на класс и указателей на объект


ушел, почему то не могу отвечать на элементарные вопросы

Здесь простой и понятный пример. 1ый вариант объявление переменной и выделение памяти(переменная хранит по умолчанию мусор произвольное значение или номер сектора или адрес в с++ здесь не знаю), второй вариант инициализация.

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

указателей на класс и указателей на объект

Тоже следовало бы понять что это такое сейчас в сети почитаю поищу может есть что-то.

 
Andrey Sokolov:

Приветствую. 

Подскажите, пожалста, как рассчитываются горизонтальные уровни для сетки в мт4 и в мт5?

обычно определяют самые крайние сверху/снизу ордера по ценам открытия ордера, затем прибавляют некое значение и получают новую цену по которой или следят когда цена пробьет этот уровень- условие и выставляют новый ордер или сразу ставят сетку отложенных ордеров ориентируясь на максимальное кол-во ордеров и затем сопровождают эту сетку


тут в общем поиском по КБ любой компактный код проще посмотреть и модифицировать под свои задачи


ЗЫ: если вопрос про неттинговые счета - не пробовал, но кажется были статьи, по мне неттинговые счета сложнее для таких простых ТС, хотя может просто не пробовал это делать

 
Seric29:

Здесь простой и понятный пример. 1ый вариант объявление переменной и выделение памяти(переменная хранит по умолчанию мусор произвольное значение или номер сектора или адрес в с++ здесь не знаю), второй вариант инициализация.

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

выделение памяти будет и в примере 1 и в примере 2

пример 2 это и объявление и инициализация, пример 1 только объявление

с классами то же самое, класс это пользовательский тип который содержит поля(свойства) и методы работы с этими полями

указатель на класс это объявление, но без инициализации и без выделения памяти под тип (класс)

указатель = new MyClass(); - это объявление и инициализация при которой будет создан новый экземпляр класса и это экземпляр класса будет возвращен как ссылка на обьект (не совсем ссылка, в MQL это ... не важно и так путаетесь)

....

если не хотиете читать, то хотя бы используйте вот этот мой пост чтобы изменить Ваш пример:

CFoo *pfoo6=new CFoo();

на 

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

и попытаться понять, что происходит - при присвоении последней строчки..... но все равно читать, просто спрашивать по форумам это не вариант