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

 
Renat Fatkhullin:

билд 1711, та же ошибка наблюдалась на 1709 и 1700, ранее не замечал:

- если запрашивается время открытия бара которого нет в истории, то CopyTime замирает на неизвестное время, к примеру запрашиваю время открытия бара:

CopyTime(_ticker, _tf, _start, _stop, _buff)
где:
_ticker == RTS-9.12
_tf == PERIOD_M1
_start == D'2017.09.20 19:01'
_stop == D'2017.09.20 19:00'
_buff == динамический массив типа datetime

но т.к. вечернюю сессию перенесли в тот день на 19:05 и бары в истории за данный промежуток времени отсутствуют, то после вызова функции управление программе не передается обратно и она висит.

Хотя по идее должен осуществляться выход из функции с ошибкой.

 

Ошибка при выполнении

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
typedef void (*fn)();
void g() {}
struct A {
        A() : a( g ) {}
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //вместо B::a() вызывается g()
}
 

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

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a( int ) {}
};
void OnStart()
{
        B b;
        b.a( 2 ); //error: '2' - wrong parameters count
}

 
Не могу вспомнить нюанс со статик переменными. Прошу напомнить, почему эта гадина выдает такое?
class A
{
public:
  A()
  {
    A::f();
  }
  
  static void f()
  {
    static bool Tmp = true;
    
    Print(Tmp);
  }
};

void OnStart()
{
  static A a; // static - false, иначе - true;
}
 

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

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

A100, 2017.12.19 23:04

Ошибка при выполнении

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
void g() {}
void OnStart()
{
        B b;
        b.a = g;
        b.a(); //вместо B::a() вызывается g()
}

Вроде, в обоих случаях понятная причина - поле и метод совпадают по имени, поэтому обращение к полю и методу абсолютно одинаковое. Соответственно, компилятор вызывает поле, а не метод. В первом случае поле не задано, поэтому облом. Во втором все норм - вызвано поле.

Поэтому если в базовом объявить метод, а к потомке - поле с тем же именем, то отрабатывать будет в другой последовательности.

Компилятор должен был такое выдать

declaration of 'a' hides member declaration at line 3
 
fxsaber:

Соответственно, компилятор вызывает поле, а не метод.

А чем поле лучше метода? C++ например вызывает не поле а метод - это и логично - потому что метод в производном классе, а значит ближе. Другими словами - если в производном классе сигнатура полностью подходит - зачем лезть в базовый?

 
A100:

А чем поле лучше метода? C++ например вызывает не поле а метод - это и логично - потому что метод в производном классе, а значит ближе. Другими словами - если в производном классе сигнатура полностью подходит - зачем лезть в базовый?

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

На тему "ближе" написал

fxsaber:

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

 
fxsaber:
Не могу вспомнить нюанс со статик переменными. Прошу напомнить, почему эта гадина выдает такое?

Вся проблема в последовательности инициализации переменных и последовательности выполнения кода.

Это проще понять в режиме пошаговой отладки, чем объяснить словами.

 

Странный баг с работами во фрилансе.

было 4 работы в процессе. я взял 1 стало 5 сдал одну осталось 5

по факту 4 работы пишет 5 . взял еще одну пишет 6 . сдал одну  по факту 4 работы но в процессе 6

взял еще одну по факту 5 работ но "в процессе" 7

теперь я не могу брать работы хотя у меня их всего 5

номер заявки 

1913868 

 
Aleksei Beliakov:

Странный баг с работами во фрилансе.

было 4 работы в процессе. я взял 1 стало 5 сдал одну осталось 5

по факту 4 работы пишет 5 . взял еще одну пишет 6 . сдал одну  по факту 4 работы но в процессе 6

взял еще одну по факту 5 работ но "в процессе" 7

теперь я не могу брать работы хотя у меня их всего 5

номер заявки 

1913868 

Спасибо за сообщение, работаем над исправлением.

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