Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/828: Рейтинг темы: голосов - 828, средняя оценка - 4.66
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531

Ошибка was not declared in this scope при компиляции

19.04.2019, 22:16. Показов 169848. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простой код, но Arduino IDE напрочь отказывается принимать переменные. Что за глюк или я что-то неправильно делаю?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() {
  
  Serial.begin(9600);
  int count = 0;
  pinMode(7, INPUT);
  pinMode(13, OUTPUT);
 
}
 
void loop() {
 
  if( digitalRead(7) == HIGH ){ 
    
    while(1){ 
      delayMicroseconds(2); 
      count++;  
      if( digitalRead(7) == LOW ){ Serial.println(count); count = 0; break; }
      }
    }  
}
ошибка при компиляции "'count' was not declared in this scope", что не так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2019, 22:16
Ответы с готовыми решениями:

Ошибка was not declared in this scope при компиляции C++
Написал такую программу: #include<conio.h> using namespace std; int main() { float pi = 3.1415926535; double x, Eps,...

Ошибка при компиляции - error: ‘_byteswap_ushort’ was not declared in this scope
Добрый день Пытаюсь первый раз скомпилировать программу под linux, со многими ошибками разобрался, но на этой застрял. Вроде как он...

Ошибка при компиляции error: 'endl' was not declared in this scope
#include <stdio.h> #include <conio.h> void main() { double a, b, x, h, r, s; int n, zn = -1, k; puts("Input...

14
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
19.04.2019, 23:26
Лучший ответ Сообщение было отмечено SergeyKagen как решение

Решение

C++
1
2
3
4
5
6
7
8
  int count = 0; //глобальная переменная
 
  void setup() {
   Serial.begin(9600);
  pinMode(7, INPUT);
  pinMode(13, OUTPUT);
 
}
1
 Аватар для Lavad
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
14.09.2019, 22:33
Доброго времени суток!
У меня то же сообщение, но на функцию :-(
Создал функцию (за пределами setup и loop), которая только принимает вызов, ничего не возвращает:

C++
1
2
3
4
5
void myDispay(byte x, byte y, char str) {
  lcd.setCursor(x, y);
  lcd.print(temp, 1);   // выводим данные, с точностью до 1 знака после запятой
  lcd.print(str);   // выводим писанину
  }
В loop() делаю вызов:

C++
1
myDisplay(0,0,"C");
При компиляции выделяется этот вызов, с сообщением:

'myDisplay' was not declared in this scope

Замучился искать инфу о декларации/обьявлении функции. Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции
Что делаю не так? В чем моя ошибка? Помогите, пожалуйста.

P.S. Код, что использовал в качестве функции, работоспособен. Раньше находился в loop(). Скетч постепенно разрастается, много однотипных обращений к дисплею...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.09.2019, 23:57
Цитата Сообщение от Lavad Посмотреть сообщение
Создал функцию (за пределами setup и loop),
Перевидите на нормальный язык.
Какие еще пределы?

В другом файле что ли?

Добавлено через 1 минуту
Цитата Сообщение от Lavad Посмотреть сообщение
Замучился искать инфу о декларации/обьявлении функции. Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции
Что делаю не так? В чем моя ошибка? Помогите, пожалуйста
Читать учебники по С++ не пробовали?


https://metanit.com/cpp/tutorial/3.1.php
http://cppstudio.com/post/5291/

Специфика Arduino лишь отличается тем что пред объявления не всегда нужны.

Добавлено через 7 минут
Кроме того иногда потеряй скобок {} приводят к таким ошибкам.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
15.09.2019, 00:09
Цитата Сообщение от Lavad Посмотреть сообщение
Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции
это где ж такое написано?
функцию нужно объявить перед первым вызовом, сиречь сверху
можно и просто декларировать сверху
C++
1
void myDispay(byte x, byte y, char str);
а объявить уже в удобном месте
0
 Аватар для Lavad
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
15.09.2019, 00:48
Неделю назад ВПЕРВЫЕ включил Arduino Uno.
Задолго до этого писал программы под Windows (БейсикВизуал) и AVR (Basic, немного Assembler). Т.е. имеется некоторое представление об объявлении переменных, функций,... От Си всегда держался как можно дальше. Это первая и последняя причина "нечитания" книг по Си. За неделю экспериментов на Arduino мнение об этом пока не изменилось - легче вернуться к Ассму, чем копаться в Си.

Написал на том же языке, что и читал на всяких форумах и справочниках по Arduino :-). За пределами этих функций - значит не внутри них.

Обе приведенных Вами ссылок просмотрел, проверил в скетче... В итоге вылезла другая ошибка:
function 'void myDisplay(byte, byte, char)' is initialized like a variable

void myDisplay(byte x, byte y, char str) тоже пробовал. Та же ошибка.

Что не так на этот раз? :-(
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
15.09.2019, 01:26
Цитата Сообщение от Lavad Посмотреть сообщение
В итоге вылезла другая ошибка:
function 'void myDisplay(byte, byte, char)' is initialized like a variable
точку с запятой в конце поставил?
1
 Аватар для Lavad
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
15.09.2019, 08:46
Вот скетч. Проще некуда.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <PCD8544.h>
 
float temp = 0;
static PCD8544 lcd;   // даем имя подключенному дисплею (lcd)
static const byte Lm35Pin = 14;   // аналоговый пин (A0) Arduino, к которому подключен LM35
 
//void myDisplay() = 0;
//void myDisplay(byte, byte, char, float) = 0;
//void myDisplay(byte x, byte y, char str, float temp) = 0;
 
void myDispay(byte x, byte y, char str, float temp) {
  lcd.setCursor(x, y);   // начиная с (x,y)...
  lcd.print(temp, 1);   // выводим temp
  lcd.print(str);   // выводим писанину
}
 
void setup() {
  lcd.begin(84, 48);   // инициализируем дисплей
  analogReference(INTERNAL);   // подключаем внутренний ИОН на 1.1V
}
 
void loop() {
  float temp = analogRead(Lm35Pin) / 9.31;  // подсчитываем температуру (в Цельсиях)...
  myDisplay(0, 0, "C", temp);   // отправляем данные на экран
  delay(500);   // ждем 500 мсек
}
Любое из трех так называемых "объявлений" (строки 7...9) выдает одну и ту же ошибку - я пытаюсь объявить функцию как переменную.

Добавлено через 9 минут
Попробовал так:
C++
1
void myDisplay(byte x, byte y, char str, float temp);
Компилятор задумался (я успел обрадоваться), но, зараза :-), он снова поставил свой автограф :-)

undefined reference to `myDisplay(unsigned char, unsigned char, char, float)

На этот раз он пожаловался на строку вызова функции.

Добавлено через 34 минуты
Когда что-то новое затягивает, забываешь о нормальном отдыхе, теряешь концентрацию...
Нашел ошибку. Чистейшая грамматика
C++
1
void myDispay(byte x,...
Dispay вместо Display

Добавлено через 8 минут
ValeryS, благодарю за попытку помощи!
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
15.09.2019, 10:36
Цитата Сообщение от Lavad Посмотреть сообщение
void myDisplay(byte, byte, char, float) = 0;
вот так не надо делать(приравнивать функцию к нулю)
так в классическом С++ объявляют чисто виртуальные функции, и класс в котором объявлена чисто виртуальная функция становится абстрактным. Означает что у функции нет реализации и в дочернем классе нужно обязательно реализовать функцию. А из абстрактного класса нельзя создать объект

Добавлено через 5 минут
Цитата Сообщение от Lavad Посмотреть сообщение
void myDispay(byte x, byte y, char str, float temp)
Цитата Сообщение от Lavad Посмотреть сообщение
myDisplay(0, 0, "C", temp);
просишь чтобы функция принимала символ char str, а передаешь строку "C"
или передавай символ
C++
1
myDisplay(0, 0, 'C', temp);
или проси передавать строку, например так
C++
1
void myDispay(byte x, byte y, char * str, float temp);
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.09.2019, 12:02
Кроме того наверное лучше так:

C++
1
2
3
4
5
6
7
8
void myDispay(PCD8544& lcd,byte x, byte y, char str, float temp) 
{
  lcd.setCursor(x, y);   // начиная с (x,y)...
  lcd.print(temp, 1);   // выводим temp
  lcd.print(str);   // выводим писанину
}
 
myDisplay(lcd,0, 0, 'C', temp);
Тогда можно будет вынести ф-цию в отдельный файл/модуль.
1
15.09.2019, 21:07

Не по теме:

Цитата Сообщение от Lavad Посмотреть сообщение
Arduino Uno.
Цитата Сообщение от Lavad Посмотреть сообщение
AVR (Basic, немного Assembler).
Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере.

0
15.09.2019, 21:21

Не по теме:

Цитата Сообщение от locm Посмотреть сообщение
Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере.
Но лучше не надо ...

0
 Аватар для Lavad
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
16.09.2019, 12:12
Цитата Сообщение от ValeryS Посмотреть сообщение
это где ж такое написано?
функцию нужно объявить перед первым вызовом, сиречь сверху
можно и просто декларировать сверху
а объявить уже в удобном месте
Оказалось, что я верно понял чтиво по справочникам: если ты вызываешь функцию, это и есть обьявление функции. А сама функция может располагаться по скетчу в ЛЮБОМ месте (но за пределами setup, loop и любых других функций). И больше никаких специфических строк.

Цитата Сообщение от ValeryS Посмотреть сообщение
вот так не надо делать(приравнивать функцию к нулю)...
Методом проб и ошибок уже понял :-).

Цитата Сообщение от ValeryS Посмотреть сообщение
или передавай символ... 'C'...
Если передаю в одинарных кавычках более одного символа, а функция ждет как char str, то выводятся на экран только самый правый из отправленных символов. Отправил "абв", а выводится "в".
Выкрутился, прописав в функции char str[], а символы отправляю через двойные кавычки.

Цитата Сообщение от ValeryS Посмотреть сообщение
или проси передавать строку, например так... char * str
Буквально вчера попалось это в справочнике, но как-то не дошло, что тоже мой вариант :-).

Цитата Сообщение от Avazart Посмотреть сообщение
Кроме того наверное лучше так:
C++
1
void myDispay(PCD8544& lcd,byte x, byte y, char str, float temp) {...}
Тогда можно будет вынести ф-цию в отдельный файл/модуль.
Благодарю за совет! Как-нибудь проверю...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.09.2019, 12:54
Цитата Сообщение от Lavad Посмотреть сообщение
Оказалось, что я верно понял чтиво по справочникам: если ты вызываешь функцию, это и есть обьявление функции
Нафиг выкиньте эти справочники.
Почитайте мои ссылки.
0
 Аватар для Lavad
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
16.09.2019, 13:00
Ссылки Ваши добавлены в закладки. Время от времени заглядываю.
Но теория для меня - всего лишь набор понятий. Я же высказался после практической проверки. А как я понял, так оно и работает :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2019, 13:00
Помогаю со студенческими работами здесь

При компиляции выдается ошибка [Error] 'randomize' was not declared in this scope
Доброго времени суток. Есть код написанный на Си, но при компиляции в DevC++ выдает ошибку 'randomize' was not declared in this scope ...

Ошибка компиляции: 'nullptr' was not declared in this scope
При компиляции этого кода #include &lt;pthread.h&gt; #include &lt;sys/stat.h&gt; #include &lt;fcntl.h&gt; #include &lt;unistd.h&gt; #include...

Ошибка компиляции "count was not declared in this scope"
// Example program // #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { char a; char b; char...

Ошибка компиляции "error: ‘s’ was not declared in this scope"
#include &lt;iostream&gt; #include &lt;string&gt; int func(std::string&amp; s) { std::string s_temp{ &quot;&quot; }; int size = s.size(); ...

'arr' was not declared in this scope 'sum' was not declared in this scope такие вот ошибки.(
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main () { setlocale(LC_ALL, &quot;rus&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru