Баг компилятора: 'operator=' - structure have objects and cannot be copied

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Navoykov
4571
Alexey Navoykov  

Билд 1881.  Баг компилятора.  Выдаёт ошибку, хотя явно задан оператор копирования.

void F()  
{   
  class A
  { 
    struct B
    {
      void* _ptr;
      void operator=(const B& obj) { _ptr= obj._ptr; }
    }; 
    B _b;
           
    void SomeMethod(B& b)  { b= _b; }  // 'operator=' - structure have objects and cannot be copied
  };
}

Причём если вынести класс A из функции F, то всё компилируется.

fxsaber
16755
fxsaber  
Где может быть полезно задание классов и структур в чьих-то потрохах?
Alexey Navoykov
4571
Alexey Navoykov  
Если структуры и классы предназначены для локального одноразового применения, то удобней их размещать непосредственно по месту использования, чем размазывать код и захламлять пространство имён.
A100
2094
A100  
fxsaber:
Где может быть полезно задание классов и структур в чьих-то потрохах?

Например здесь:

#include <Math\Stat\Math.mqh>
struct S {}; //Error: 'S' - identifier already used
void OnStart() {}

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

#include <Math\Stat\Math.mqh>
void OnStart()
{
struct S {}; //нормально
}
нормально
Alexey Navoykov
4571
Alexey Navoykov  
A100:

Например здесь:

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

нормально

Да уж, это жесть конечно.  S - это ж просто локальная переменная.  Я даже и не в курсе был, что до такой степени всё печально )     С названиями классов приходилось выкручиваться через дефайны, а оказывается ещё и с локальными переменными надо помучаться )   И вот как в таком хаосе работать...

Я уже неоднократно предлагал разработчикам ввести наконец namespace, но там всё глухо как в танке.

fxsaber
16755
fxsaber  
Alexey Navoykov:

Да уж, это жесть конечно.  S - это ж просто локальная переменная.  Я даже и не в курсе был, что до такой степени всё печально )     С названиями классов приходилось выкручиваться через дефайны, а оказывается ещё и с локальными переменными надо помучаться )   И вот как в таком хаосе работать...

Хаоса не ощущаю. Наверное, примитивно пишу.

Alexey Navoykov
4571
Alexey Navoykov  
fxsaber:

Хаоса не ощущаю. Наверное, примитивно пишу.

Это до поры до времени. Когда всё свалено в одну кучу, то крах неизбежен )  Захотите подключить чью-то библиотеку, а тут окажется что её автор пишет так же "примитивно" как и вы, используя такие же имена классов и функций.
fxsaber
16755
fxsaber  
Alexey Navoykov:
Это до поры до времени. Когда всё свалено в одну кучу, то крах неизбежен )  Захотите подключить чью-то библиотеку, а тут окажется что автор пишет так же "примитивно" как и вы, используя такие же имена классов и функций.

Макросами прибью.

Viktar Dzemikhau
3386
Viktar Dzemikhau  
fxsaber:

Макросами прибью.

Ну.. не все такие спецы в макросах как fxsaber.. ))
Viktar Dzemikhau
3386
Viktar Dzemikhau  
Кстати, мкл это не то место, где есть необходимость подключать чьи-то библиотеки. А если что-то и хочется дёрнуть для более быстрой реализации проекта, то всегда можно перелопатить чей-то код. Ну или хотя бы переименовать схожие функции по названиям.
Alexey Navoykov
4571
Alexey Navoykov  
Viktar Dzemikhau:
Кстати, мкл это не то место, где есть необходимость подключать чьи-то библиотеки.
Ну да, здесь суровые челябинские мужики заняты изобретением собственных велосипедов, кто во что горазд )
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий