Пытался скомпилить код в спойлере ниже. Метод "KBGetNumRu" находится ниже KBGetNum. Раньше проблем не было. Сейчас пытаюсь скомпилить - error: 'KBGetNumRu' was not declared in this scope Спойлер: Код Код (C++): #define _kbgetnum(a, b, c) if(ch == a || ch == b) return c; #define _kbgetnum1(a, b) if(ch == a) return b; byte KBGetNum(char ch) { _kbgetnum1(' ', 1); if (isdigit(ch)) { _kbgetnum1('0', 1); _kbgetnum1('1', 1); _kbgetnum1('2', 2); _kbgetnum1('3', 3); _kbgetnum1('4', 4); _kbgetnum1('5', 5); _kbgetnum1('6', 6); _kbgetnum1('7', 7); _kbgetnum1('8', 8); _kbgetnum1('9', 9); return byte(ch); } if (_Layout == RUS && KBGetNumRu(ch) != 0) return KBGetNumRu(ch); //Проблемная строка _kbgetnum('A', 'a', 1); _kbgetnum('B', 'b', 2); _kbgetnum('C', 'c', 3); _kbgetnum('D', 'd', 4); _kbgetnum('E', 'e', 5); _kbgetnum('F', 'f', 6); _kbgetnum('G', 'g', 7); _kbgetnum('H', 'h', 8); _kbgetnum('I', 'i', 9); _kbgetnum('J', 'j', 10); _kbgetnum('K', 'k', 11); _kbgetnum('L', 'l', 12); _kbgetnum('M', 'm', 13); _kbgetnum('N', 'n', 14); _kbgetnum('O', 'o', 15); _kbgetnum('P', 'p', 16); _kbgetnum('Q', 'q', 17); _kbgetnum('R', 'r', 18); _kbgetnum('S', 's', 19); _kbgetnum('T', 't', 20); _kbgetnum('U', 'u', 21); _kbgetnum('V', 'v', 22); _kbgetnum('W', 'w', 23); _kbgetnum('X', 'x', 24); _kbgetnum('Y', 'y', 25); _kbgetnum('Z', 'z', 26); _kbgetnum1('`', 27); _kbgetnum1('~', 28); _kbgetnum1('!', 29); _kbgetnum1('@', 30); _kbgetnum1('\"', 31); _kbgetnum1('#', 32); _kbgetnum1('$', 34); _kbgetnum1(';', 35); _kbgetnum1('%', 36); _kbgetnum1('^', 37); _kbgetnum1(':', 38); _kbgetnum1('&', 39); _kbgetnum1('?', 40); _kbgetnum1('*', 41); _kbgetnum1('(', 42); _kbgetnum1(')', 43); _kbgetnum1('-', 44); _kbgetnum1('_', 45); _kbgetnum1('=', 46); _kbgetnum1('+', 47); _kbgetnum1('[', 48); _kbgetnum1('{', 49); _kbgetnum1(']', 40); _kbgetnum1('}', 51); _kbgetnum1('\\', 52); _kbgetnum1('|', 53); _kbgetnum1('/', 54); _kbgetnum1(',', 55); _kbgetnum1('<', 56); _kbgetnum1('.', 57); _kbgetnum1('>', 58); return 0; } byte KBGetNumRu(char ch) { _kbgetnum('F', 'f', 1); _kbgetnum('<', ',', 2); _kbgetnum('D', 'd', 3); _kbgetnum('U', 'u', 4); _kbgetnum('L', 'l', 5); _kbgetnum('T', 't', 6); _kbgetnum('~', '`', 7); _kbgetnum(':', ';', 8); _kbgetnum('P', 'p', 9); _kbgetnum('B', 'b', 10); _kbgetnum('Q', 'q', 11); _kbgetnum('R', 'r', 12); _kbgetnum('K', 'k', 13); _kbgetnum('V', 'v', 14); _kbgetnum('Y', 'y', 15); _kbgetnum('J', 'j', 16); _kbgetnum('G', 'g', 17); _kbgetnum('H', 'h', 18); _kbgetnum('C', 'c', 19); _kbgetnum('N', 'n', 20); _kbgetnum('E', 'e', 21); _kbgetnum('A', 'a', 22); _kbgetnum('{', '[', 23); _kbgetnum('W', 'w', 24); _kbgetnum('X', 'x', 25); _kbgetnum('I', 'i', 26); _kbgetnum('O', 'o', 27); _kbgetnum('}', ']', 28); _kbgetnum('S', 's', 29); _kbgetnum('M', 'm', 30); _kbgetnum('\"', '\'', 31); _kbgetnum('>', '.', 32); _kbgetnum('Z', 'z', 33);; _kbgetnum1('\"', 31); _kbgetnum1('#', 33); _kbgetnum1('$', 35); _kbgetnum1('%', 36); _kbgetnum1('^', 37); _kbgetnum1('&', 40); _kbgetnum1('|', 54); _kbgetnum1('?', 55); _kbgetnum1('/', 57) return 0; }
Ошибка из кривых костылей к с++ в ардуино иде. Напишите byte KBGetNumRu(char ch); где-нибудь в начале файла.
Это решит проблему ошибок, но для меня это не решение. У меня в коде в дальшейшем будет множество методов и если к каждому будет ошибка, то хоть куда не суй метод, он все равно что-то да выдаст Может есть какое-то решение?
Я дал вам решение. Попробуйте прочитать, что я вам написал. Если не понятно, то читайте учебник по С++.
тогда РЕШЕНИЕ = бросить ардуину и заняться чем-то более понятным. Прочитайте предыдущий совет, rkit все написал правильно, именно так это и решается в "настоящем" программировании С/С++
C++ требует прототипов функций. АрдуинаИДЕ просто незаметно от пользователя создает их в секретном h файле.
Похоже, что проблема связана с наличием символов отличных от латинницы в путях к скетчу или куда установлена Arduino IDE.
Пару раз возникало такое, зависимости не уловил. Все пути и настройки те же. AVRS хорош, хоть и не без тараканов тоже.
Зависимость такая, что начиная с какой-то версии Arduino IDE перестали нормально генерироваться исходники "*.c", "*.cpp" и "*.h" на основе скетча, если в путях присутствуют символы отличные от латинницы, например, кириллица -- т.е. русские буковки в пути к скетчу. Вариантов решения как минимум два: в названиях каталогов использовать только латинницу; писать скетчи по всем правилам языков C/C++.