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

 

Что это значит?

2018.04.24 14:02:21.721 Books   invalid book item[Si-6.18,buy,61996.00000,-50]
 
fxsaber:
Почему скрипт ничего не выводит?
потому что передача указателя а не по значению
 
Комбинатор:
потому что передача указателя а не по значению

Что-то совсем перестал понимать. Вот код

class A
{
public:
  template <typename T>
  void operator =( T& ) // Без ссылки работает
  {
    Print(__FUNCSIG__);
  }
  
  void operator =( int )
  {
    Print(__FUNCSIG__);
  }
};

void f( A*& )
{
  Print(__FUNCSIG__);
}

void OnStart()
{
  A* a = new A;  
  
  A b;  
  b = a; // cannot convert type ' *' to reference of type 'A *'
  
  a = a;
  a = 1;
  
  f(a);
  
  delete a;
}

Почему-то ругается на передачу указателя по ссылке. При этом функция f спокойно по ссылке принимает указатель.


Результат

void A::operator=<A*>(A*)
void A::operator=(int)
void f(A*&)

Оператор с int-ом вызвался без проблем, а оператор с указателем - нет.

 
Без ссылки по логике тоже не должен работать (имхо). это возможно особенность mql указателей - то что их разыменовывать не надо
 
Комбинатор:
Без ссылки по логике тоже не должен работать (имхо). это возможно особенность mql указателей - то что их разыменовывать не надо

Просьба ко всем, кто понимает данную тему, давайте выясним. Сейчас какая-то каша.

Раньше думал, что оператор - это просто один из методов, который удобно использовать из-за своего синтаксиса. И больше никаких отличий. Теперь выясняется, что это не всегда так.

 
fxsaber:

Раньше думал, что оператор - это просто один из методов

любой оператор да. но

1. оператор = один из самых востребованных

2. единственный оператор который генерится компилятором

 
Комбинатор:

любой оператор да. но

1. оператор = один из самых востребованных

2. единственный оператор который генерится компилятором

Так перегрузил/перезадал оператор.

 

я ошибся, без ссылки должно работать. значит со ссылкой не работает из-за нюансов подстановки.

в плюсах и со ссылкой работает.

если у вас по таким вещам вопросы лучше проверять на эталоне, т.е. на С++. правда синтаксис может немного отличаться

operator_fxsaber, C++ (gcc) - rextester
  • rextester.com
operator_fxsaber in C++ (gcc)
 
Комбинатор:

я ошибся, без ссылки должно работать. значит со ссылкой не работает из-за нюансов подстановки.

в плюсах и со ссылкой работает.

если у вас по таким вещам вопросы лучше проверять на эталоне, т.е. на С++. правда синтаксис может немного отличаться

Спасибо! К сожалению, не владею языками, кроме MQL. Да и MQL слабо понимаю. Учусь ООП на MQL.

 

Сначала я подумал что совсем не знаю арифметику.


Как из этих двух чисел могло получиться 138.95 и как может при сложении двух нулей может получиться -24.34???

Но потом понял:

Если сегодня закрылись, открытые вчера или раньше, позиции, то они не будут отображаться, но в подсчётах суммы по закрытым позициям они участвуют.

Если изменить глубину отображаемой истории и потом опять выбрать "Сегодня", то все потерянные позиции вернутся на своё место.


Будет-ли указанный баг исправлен? Или это никому не надо?