Проблема при работе с массивами
- Войдите на сайт для отправки комментариев
Пнд, 07/03/2016 - 02:18
Доброго времени суток!
Есть библиотека Adafruit_MotorShield, есть оригинальный код:
#define MICROSTEPS 8 // 8 or 16 ... if (MICROSTEPS == 8) uint8_t microstepcurve[] = {0, 50, 98, 142, 180, 212, 236, 250, 255}; #elif (MICROSTEPS == 16) uint8_t microstepcurve[] = {0, 25, 50, 74, 98, 120, 141, 162, 180, 197, 212, 225, 236, 244, 250, 253, 255};
Когда я меняю его, задавая вместо констант переменные, вылезает ошибка. Вот код:
void Adafruit_StepperMotor::setSteps(uint8_t newsteps) { switch (newsteps) { case 8: microsteps = 8; microstepcurve[] = {0, 50, 98, 142, 180, 212, 236, 250, 255}; break; case 16: microsteps = 16; microstepcurve[] = {0, 25, 50, 74, 98, 120, 141, 162, 180, 197, 212, 225, 236, 244, 250, 253, 255}; break; } }
Вот ошибка:
error: expected primary-expression before ']' token microstepcurve[] = {0, 50, 98, 142, 180, 212, 236, 250, 255}; ^
Объясните мне пожалуйста, в чем дело?
Наверное вы не указали количество элементов в массиве. Попробуйте явно указать
Не путайте обявление и присвоение!
Уже надо какую-то ссылку по основам С/С++ сразу тыкать на такие ответы, по ходу. Потому как самые основы - объявление переменных, присвоение переменным значения.
ТС: вы чего хотите добиться вот такой строчкой-то?
Вы объявили инициализированный массив, который заполняется значениями на этапе компиляции:
Теперь вы можете обращаться с любому элементу массива по его индексу, и писать/читать значения, тоже по индексу, но, не так:
А - вот так:
Уже надо какую-то ссылку по основам С/С++ сразу тыкать на такие ответы, по ходу. Потому как самые основы - объявление переменных, присвоение переменным значения.
ТС: вы чего хотите добиться вот такой строчкой-то?
Вы объявили инициализированный массив, который заполняется значениями на этапе компиляции:
Теперь вы можете обращаться с любому элементу массива по его индексу, и писать/читать значения, тоже по индексу, но, не так:
А - вот так:
Основы это важно, основы это хорошо. Только вот вы обсолютно не поняли суть вопроса человека. А она в следующем. Ему хочется что бы выбор массива происходил не по дифинишу, а по значению присвоенному переменной, определяющей какой массив будет использоваться. Не смог объяснить что он конкретно хочет, а хочет он видимо убрать из либы условие компиляции по значению MICROSTEPS, заменив его swich. В общем изменить либу.
Основы это важно, основы это хорошо. Только вот вы обсолютно не поняли суть вопроса человека. А она в следующем. Ему хочется что бы выбор массива происходил не по дифинишу, а по значению присвоенному переменной, определяющей какой массив будет использоваться. Не смог объяснить что он конкретно хочет, а хочет он видимо убрать из либы условие компиляции по значению MICROSTEPS, заменив его swich. В общем изменить либу.
Да неважно что он хочет, важно, что он делает это, не понимая основ. Что и как ему нужно сделать - вопрос десятый, а первый вопрос в том, что должно быть понимание, как можно, а как нельзя делать.
Всё, надо запастись дежурной ссылкой на Кернигана и Ричи ;)
diger67, да, все верно - все именно так.
DIYMan, на самом деле просто не внял мануалам - исправил, хоть и громоздко, но работает и уже дальше буду допиливать.
В общем, всем спасибо большое! С проблемой разобрался.