Да, нашел ошибку в Стандартной Библиотеке. Написал в Сервисдеск.
Функции объявлены:
virtual bool CSeries::BufferResize( int size)
Но:
virtual bool CiTime::BufferResize(const int size)
В одной из них отсутствует модификатор const, поэтому функции опознаются как различные, а не виртуальные.
Считаю, что везде должен быть модификатор const, а внутри функции CSeries::BufferResize(const int size) проверка на максимальную глубину истории в год для старших таймфреймов должна быть исправлена (например, с помощью локальной переменной)
Видимо, пользователи пока еще редко используют виртуальные функции и объекты, предоставляемые Стандартной Библиотекой, несмотря на их удобство.
Да, в сервисдеске подтвердили наличие ошибки, пообещали исправить.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В Сервисдеск написал, напишу еще тут.
Имеем код:
CiTime* pTime = new CiTime; // 1.Создаем объект CiTime
pTime.Create(Symbol(),PERIOD_CURRENT); // 2.Инициализируем объект.
CSeries* pSTime = pTime; // 3.Присваиваем указатель предку
pSTime.BufferResize(1000); // 4.Вызываем ВИРТУАЛЬНУЮ функцию, но вызывается функция ПРЕДКА !!!
CiTime* pSecondTime = pSTime; // 5.Присваиваем указатель потомку
pSecondTime.BufferResize(2000); // 6. Вызываем ВИРТУАЛЬНУЮ функцию, вызывается ПРАВИЛЬНАЯ функция потомка
Насколько я понимаю, раз функция BufferResize() везде объявлена виртуальной - и в четвертой, и в шестой строке должна вызываться функция реально созданного объекта CiTime::BufferResize().
Но у меня почему-то в четвертой строке вызывается функция вызывается функция CSeries::BufferResize().
Где ошибка ? Что я делаю неправильно ?