Ошибки, баги, вопросы - страница 1729

 
fxsaber:

Создаю OBJ_CHART, и таскаю его за левый-верхний угол по чарту мышью. Во время таскания вызывается ObjectDelete с успешным результатом. MT5.

Еще. Если во время таскания OBJ_CHART менять его CHART-свойства (ChartNavigate, например), то соответствующей визуализации не происходит.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Как определить, какому индикатору принадлежит каждое из подокон".
 
A100:

Ошибка при компиляции:

Появилась в build 1447
Спасибо за сообщение, поправлен контроль за константностью передаваемого параметра.

Теперь в обоих случаях будет ошибка компиляции, для того, чтобы избежать ошибки, код следует изменить:
template<typename T>
void f1( const T* const & a[] ) {}    << добавлена константность ссылки
class A {};
void f2( const A* const & a[] ) {}    << добавлена константность ссылки
class B {
        void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
        void g2() const { f2( a ); } //нормально
        A *a[];
};
 
константность ссылки

Нигде такого не встречал. Это стандарт?

 
Ilyas:
Теперь в обоих случаях будет ошибка компиляции, для того, чтобы избежать ошибки, код следует изменить:

Проверьте пожалуйста еще вот это противоречие (здесь наоборот - ошибка внизу)

template<typename T>
void f1( const T& a[] ) {}
class A {};
void f2( const A& a[] ) {}
class B {
        void g1() const { f1( a ); } //нормально
        void g2() const { f2( a ); } //error: 'a' - parameter conversion not allowed
        A *a[];
};
 

Как в MQL5 происходит работа с памятью?

Например есть такой код:

class Alfa {}
class Beta
  {
private:
   Alfa  *ptr_a;
   Alfa   obj_a;
public:
   Beta(void) { ptr_a = new Alfa(); }
  ~Beta(void) { delete ptr_a; }
   Metod(void) {...}
  }
//---

int OnInit(void) {
   Beta *ptr_obj = new Beta();
   Beta obj;
//---
   return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
   delete ptr_obj;
}

согласно которого под объект ptr_obj будет выделена память в "куче", а под объект obj будет выделена автоматическая память. И если работа менеджера памяти MQL5 ясна для этих объектов:

1. Под объект ptr_a объекта ptr_obj память выделена в "куче"

2. Под объект obj_a объекта obj память выделена автоматически

То как организована работа менеджера памяти MQL5 в этих случаях:

3. В какой области памяти будет располагаться объект obj_a объекта ptr_obj

4. В какой области памяти будет располагаться объект ptr_a объекта obj

 
A100:

Проверьте пожалуйста еще вот это противоречие (здесь наоборот)

Всё правильно, здесь при типизации, T = A *
 
void f( const A* &Array[] );

При такой передаче есть возможность менять элементы местами в массиве (и размер), но нельзя менять сами элементы. Верно?

 

void f( const A* const &Array[] );

А здесь и элементы (и размер) местами нельзя менять. Правильно? 

 
fxsaber:

Нигде такого не встречал. Это стандарт?

Написал так, чтобы не писать: тут должна быть ссылка на константный массив указателей на константные объекты
 
fxsaber:

При такой передаче есть возможность менять элементы местами в массиве (и размер), но нельзя менять сами элементы. Верно?

 

А здесь и элементы (и размер) местами нельзя менять. Правильно? 

Да, всё верно.
Причина обращения: