Ошибка при компиляции: '...' does not name a type
- Войдите на сайт для отправки комментариев
Сб, 05/11/2016 - 01:04
#include <EEPROM.h>
// чтение
int EEPROM_int_read(int addr) {
byte raw[2];
for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
int &num = (int&)raw;
return num;
}
int cycleTimer = 0;
cycleTimer = EEPROM_int_read(0);
void setup(){
}
void loop(){
}
Уже больше часа потратил на размышление и поиск решения, почему при компиляции этого наглядного примера скетча, что выше, появляется ошибка: 'cycleTimer' does not name a type. Уже решил использовать EEPROM.get, но все таки хочу понять, почему в объявленную ранее переменную не может идти запись?
Вот в этом примере ошибок не возникает:
#include <EEPROM.h>
// чтение
int EEPROM_int_read(int addr) {
byte raw[2];
for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
int &num = (int&)raw;
return num;
}
int cycleTimer = EEPROM_int_read(0);
void setup(){
}
void loop(){
}
#include <EEPROM.h> // чтение int EEPROM_int_read(int addr) { byte raw[2]; for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i); int &num = (int&)raw; return num; } int cycleTimer = 0; // cycleTimer = EEPROM_int_read(0); //ставить надо не сюда void setup(){ cycleTimer = EEPROM_int_read(0); //ставить надо сюда } void loop(){ cycleTimer = EEPROM_int_read(0); //или ставить надо сюда }Попробовал читать с EEPROM внутри функции setup() - ошибок при компиляции нет. Выходит так и задумано кем то...
Попробовал читать с EEPROM внутри функции setup() - ошибок при компиляции нет. Выходит так и задумано кем то...
Ну да. Теми кто проектировал язык Си
Или сюда
#include <EEPROM.h> // чтение int EEPROM_int_read(int addr) { byte raw[2]; for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i); int &num = (int&)raw; return num; } int cycleTimer = 0; // cycleTimer = EEPROM_int_read(0); //ставить надо не сюда void setup(){ } void loop(){ cycleTimer = EEPROM_int_read(0); //или сюда - в зависимости от необходимого действия }Спасибо за ответ, пока отписывался, вы уже ответили. Вопрос решен.
Разница в записях в том, что строка cycleTimer = EEPROM_int_read(0); это попытка выполнения команды вне процедуры - это ошибка, внутри setup процедуры - нет ошибки. Во втором
intcycleTimer = EEPROM_int_read(0);случае это объявление переменной и присвоение ей адреса подпрограммы- вполне нормальное объявление, только не надо ожидать что подпрограмма при этом будет выполнена.