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

 
Slava:
И не должно быть возможно
Но раньше такая возможность была!
 
Попробовал выкрутиться
template <typename T>
class CLASS_COPY
{
public:
  T Data;

  CLASS_COPY( const T &Value )
  {
    Data = Value;
  }
};

template <typename T1, typename T2>
void Copy( T1 &ObjectDst, const T2 &ObjectSrc )
{
   const CLASS_COPY<T2> Object(ObjectSrc);
   const CLASS_COPY<T1>* ObjectCopy = dynamic_cast<const CLASS_COPY<T1>*>(&Object);
   
   ObjectDst = ObjectCopy.Data; // invalid pointer access
}

Компилируется без проблем, но при выполнении вылетает с ошибкой. Как теперь Copy-функцию написать?

 

Перстали работать DLL-ки которые раньше работали. DLL-ки 64-х битные. Те же самые DLL-ки x32 на MT4 - работают.

Windows 10 Home (x64 based PC), 1703,   MT5 bild 1589
 
fxsaber:
Попробовал выкрутиться

Компилируется без проблем, но при выполнении вылетает с ошибкой. Как теперь Copy-функцию написать?

Если длл некритично, то memcpy. Или ждать union

Вообще конечно весело. Каст структур был самими разрабами назван штатной альтернативой union, теперь кастовать нельзя а объединений еще нет, так получается?

 
С какого по какой билд принимаются EX5 в Маркет?
 
Комбинатор:

Вообще конечно весело. Каст структур был самими разрабами назван штатной альтернативой union, теперь кастовать нельзя а объединений еще нет, так получается?

Так кастовать и с появлением union полноценно нельзя будет. Только простые случаи можно будет.
 
fxsaber:

Как теперь Copy-функцию написать?

Как совсем извращение использовать файлы, зато нативно
FileReadStruct - Файловые операции - Справочник MQL4
FileReadStruct - Файловые операции - Справочник MQL4
  • docs.mql4.com
FileReadStruct - Файловые операции - Справочник MQL4
 
Комбинатор:
Как совсем извращение использовать файлы, зато нативно
Да, это ДНО.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.10 16:23

Создание лишних template-перегрузок, которые приводят к ошибкам компиляции
template <typename T>
T Func()
{
  T Res;
  
  return(Res);
}

template <typename T>
void Func( T& Value )
{
  T Res = (MqlTick)Value;
}

void OnStart()
{
  Func<string>(); // без этой строки компилируется
  
  MqlTick Tick;
  
  Func(Tick);
}

Компилятор зачем-то пытается создать

void Func( string& );
Почему этот код не компилируется в 1589? Здесь нет никакого кастинга.
 
Комбинатор:

Если длл некритично, то memcpy. Или ждать union

Вообще конечно весело. Каст структур был самими разрабами назван штатной альтернативой union, теперь кастовать нельзя а объединений еще нет, так получается?

именно так.

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