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

 
В ME сильно не хватает правильных подсказок после кастомных операторов объектов
struct STRUCT
{
  int i;  
};

class BASE
{
public:
  void Func() {};
  
  STRUCT operator []( int )
  {
    STRUCT Res = {0};
    
    return(Res);
  }
};

class CLASS : public BASE {};

void OnStart()
{
  BASE Object1;
  
  Object1[0].i = 1;
    
  CLASS Object2;
  
  Object2[0].i = 1;
}


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

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

 

Добрый день, рассмотрите, пожалуйста, вариант добавления в фриланс фильтра для отзывов по количеству звезд. 

Если у исполнителя сотни работ, то сложно узнать как он себя ведет в исключительных ситуациях - https://<Реклама персоны исполнителя удалена Artyom Trishkin>
Например, по клику на три звезды происходит перезагрузка страницы, а из отзывов остаются только те, что на три звезды или меньше.
Спасибо.

 
Это баг?
struct STRUCT
{
private:
  int i;
};

void OnStart()
{
  STRUCT Struct = {0}; // 'Struct' - cannot be initialized with initializer list
}
 
Sergey Dzyublik:

Добрый день, рассмотрите, пожалуйста, вариант добавления в фриланс фильтра для отзывов по количеству звезд. 

Если у исполнителя сотни работ, то сложно узнать как он себя ведет в исключительных ситуациях - https://<Реклама персоны исполнителя удалена Artyom Trishkin>
Например, по клику на три звезды происходит перезагрузка страницы, а из отзывов остаются только те, что на три звезды или меньше.
Спасибо.

Сергей, пожалуйста обратитесь с таким вопросом - вернее с уточнениями (ссылки на профили исполнителей) - в сервисдеск.

 
Из-за этого "бага" не могу понять, как по-человечески избежать Warning  в такой ситуации?
struct STRUCT
{
private:
  int i;
};

// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
  int i;
};

// Обходим Warning "possible use of uninitialized variable"
template <typename T>
void StructInit( T& ) {}

STRUCT Func()
{
  STRUCT Res; // possible use of uninitialized variable 'Res'
  
//  StructInit(Res); // с этой строкой Warning не появляется, но это какой-то абсурд!
  
  return(Res);  
}

void OnStart()
{
  Func();
}


Прошу помощи.

[Удален]  
fxsaber:
Из-за этого "бага" не могу понять, как по-человечески избежать Warning  в такой ситуации?


Прошу помощи.

Добавьте конструктор по умолчанию в структуру.
 
Alexey Kozitsyn:
Добавьте конструктор по умолчанию в структуру.

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

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

fxsaber, 2017.09.06 09:38

// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
  int i;
};
[Удален]  
fxsaber:

Невнимательный я:) А можете пояснить зачем это нужно? Почему нельзя использовать конструктор?

Или это для того, чтобы показать ошибку инициализации структуры с закрытым полем?

 
Alexey Kozitsyn:

Невнимательный я:) А можете пояснить зачем это нужно? Почему нельзя использовать конструктор?

Потому что при написании своего кода наткнулся именно на ситуацию, что моя структура задействована в union. Решение с пустым конструктором пришло сразу в голову, но возник облом, что в коде есть union. Поэтому вопрос задаю не занудства ради, а для практического применения.


Пришлось написать такой изврат, чтобы обойти этот "баг" (это баг или нет?)

// Зануляем структуру без конструктора со скрытыми полями
template <typename T>
void StructToNull( T& Struct )
{    
  union TMP_UNION
  {
    T Struct;
    
    struct TMP_STRUCT
    {
      uchar Array[sizeof(T)];
    } Tmp;
    
    TMP_UNION( T& Value )
    {
      ::ArrayInitialize(this.Tmp.Array, 0);
      
      Value = this.Struct;
    }
  } TmpUnion(Struct);    
}


Другого решения не увидел пока.

[Удален]  
fxsaber:
Запустил, увидел проблему. Похоже с юнионами сейчас разрешено использовать только структуры с паблик-полями. Тогда можно будет написать struct = {0};