Ошибка: Does not name a type
Я создал класс под названием «Предметы», а затем создал предмет под названием «Математика». Я пытаюсь создать класс для занятий по математике, но выдает ошибку: «Математика» не называет тип.
Код класса
class subject {
public:
char subjectname[];
char classroom[];
};
Код для занятий и математики
subject math;
math.classroom = "A1";
Как мне установить класс математики на уровень A1?
@TechnicProblem, 👍2
1 ответ
Лучший ответ:
class subject {
public:
char subjectname[];
char classroom[];
};
При этом создается класс subject
, членами которого являются два массива char
неопределенного размера. Будет предпринята попытка создать массив размером 0 (см. здесь). Это не то, чего вы хотите. Вы можете, например, заранее статически выделить пространство с максимальным количеством символов, а затем strncpy()
создать новую строку внутри буфера.
Это будет выглядеть
class subject {
public:
char subjectname[32]; //32-байтовый буфер
char classroom[32];
};
И позже
subject math;
strncpy(math.classroom, "A1", 31); //копируем максимум 31 байт, чтобы не перезаписывать NUL-терминатор
Serial.print("Classroom is: ");
Serial.println(math.classroom)
Или просто используйте класс Arduino String
. Например
#include <Arduino.h>
class subject {
public:
String subjectname;
String classroom;
};
Тогда ваш первый код использования можно будет использовать без изменений.
Пример
#include <Arduino.h>
class subject {
public:
String subjectname;
String classroom;
};
void setup() {
Serial.begin(115200);
subject math;
math.classroom = "A1";
Serial.print("Classroom is: ");
Serial.println(math.classroom);
}
void loop() { }
- Ошибка переменной does not name a type!
- Функция, объявленная в другом файле, не распознана (undefined reference to)
- Сообщение об ошибке: "exit status 1 expected initializer before 'void'."
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
Я пытался использовать этот код, но он выдает ошибку: «Математика» не называет тип в строке math.classroom.
#include <Arduino.h> предмет класса { публика: Строковое имя субъекта; струнный класс; }; предметная математика; math.classroom = "A1";
, @TechnicProblem@TechnicProblem Я прекрасно могу скомпилировать https://pastebin.com/5hVgtTi7. Это компилируется для вас?, @Maximilian Gerhardt
Спасибо. Не знал, что мне следовало поместить часть кода в void setup(). Теперь это работает., @TechnicProblem
@TechnicProblem Вы можете помещать глобальные переменные за пределы области функций, но не выполнять над ними назначения и операции. Они должны быть в функциях., @Maximilian Gerhardt
+1 за ваш отличный ответ. Кстати, размер компиляции скетча String составляет 3644 байта, а скетча strncpy — 2112 байт. +100 за использование класса в эскизе. Разница в размере компиляции (с использованием эскиза strncpy) по сравнению с тем же эскизом strncpy со всем добавленным кодом ООП составляет 0 байт. Использование класса ничего вам не стоит, но дает много. К сожалению, 3 голоса закрыли этот вопрос, заявив, что он не по теме. Согласно этой странице: https://arduino.stackexchange.com/help/on-topic, «Конкретные вопросы о платах Arduino, коде…» находятся «по теме»., @VE7JRO