1. Нельзя инкрементировать переменную в условии:
while (offset < Bars - 1 && Time[offset++] > firstParentTime);
Компилятор сообщает:
'++' - illegal assignment use
это описано на нашей странице "Операции и выражения"
Операции увеличение/уменьшение значения переменной не могут применятся в выражениях.
2. При цепочке условий объединенных логическим AND, даже если предудущее false, следующие все равно проверяются:
while (offset >= 0 && buf[offset][0] < nextPeriodStartTime) {
offset--;
}
описано там же
Логические выражения вычисляются полностью, то есть к ним не применяется схема так называемой короткой оценки.
3. Проблемы с выделением памяти под локальные строковые переменные. Всегда возвращается значение первой локальной строковой переменной.
это будем исправлять. спасибо.
Cпасибо за разъяснения. Еще один момент: я попробовал сделать функцию с масивом в качестве аргумента
'flows' - array item cannot be assigned
Массивы не могут быть аргументами функций?
void test(double flows[], int offset) {
flows[0] = 10.0;
flows[1] = 9.88;
}
Но компилятор не пропустил:
'flows' - array item cannot be assigned
Массивы не могут быть аргументами функций?
могут. у Вас сработала защита от записи в таймсерию. объявите массив по ссылке
void test(double& flows[], int offset)
Спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1. Нельзя инкрементировать переменную в условии:
Компилятор сообщает:
Приходится писать:
while (offset < Bars - 1 && Time[offset] > firstParentTime) { offset++; }2. При цепочке условий объединенных логическим AND, даже если предудущее false, следующие все равно проверяются:
while (offset >= 0 && buf[offset][0] < nextPeriodStartTime) { offset--; }При offset == -1, вместо того, чтобы выйти из цикла по невыполнению первого условия, будет выполнена проверка второго условия и произведена попытка обращения к масиву по идексу -1 с понятными последствиями :)
3. Проблемы с выделением памяти под локальные строковые переменные. Всегда возвращается значение первой локальной строковой переменной.
void test() { Print("M5 period name is " + getPeriodName(PERIOD_M5)); } string getPeriodName(int period) { switch (period) { case PERIOD_M1: return ("M1"); case PERIOD_M5: return ("M5"); //... } return ("Unknown period " + period); }В результате вместо "M5 period name is M5" получается "M5 period name is M5 period name is " :)