Не удалось передать значение в конструктор
Я создаю библиотеку JSON, предназначенную для своих нужд, на основе ArduinoJSON
v6.
Я пытаюсь определить StaticJsonDocument<_docSize> doc
параметрическим способом, но я получаю эту ошибку и не могу найти ее причину:
/Users/guy/git/Arduino/libraries/myJSON/myJSON.cpp: In constructor 'myJSON::myJSON(char*, int, bool)':
/Users/guy/git/Arduino/libraries/myJSON/myJSON.cpp:12:28: sorry, unimplemented: use of the value of the object being constructed in a constant expression
StaticJsonDocument<_docSize> doc;
^
/Users/guy/git/Arduino/libraries/myJSON/myJSON.cpp:12:36: error: 'this' is not a constant expression
StaticJsonDocument<_docSize> doc;
^
/Users/guy/git/Arduino/libraries/myJSON/myJSON.cpp:12:36: note: in template argument for type 'unsigned int'
/Users/guy/git/Arduino/libraries/myJSON/myJSON.cpp:12:41: error: invalid type in declaration before ';' token
StaticJsonDocument<_docSize> doc;
^
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
Я вставляю только соответствующую часть кода
myJSON.h
:
#ifndef myJSON_h
#define myJSON_h
#include "Arduino.h"
#include <ArduinoJson.h>
#include "FS.h"
class myJSON
{
private:
int _docSize=100;
bool useSerial;
char _filename[30];
public:
myJSON(char *filename, int docsize, bool useserial=false);
bool file_exists();//char *file=_filename);
bool file_remove();
bool format ();
};
#endif
myJSON.cpp
:
#include "Arduino.h"
#include "myJSON.h"
#include "FS.h"
#include <ArduinoJson.h>
myJSON::myJSON(char *filename, int docsize, bool useserial) {
_docSize = docsize;
useSerial = useserial;
StaticJsonDocument<_docSize> doc;
if (useSerial) {
Serial.begin(9600);
}
if (!SPIFFS.begin()) {
if (useSerial) {
Serial.println("Failed to mount file system");
}
}
else{
sprintf(_filename,"%s",filename);
}
}
@Guy . D, 👍1
1 ответ
Лучший ответ:
Класс, использующий <...>
, называется классом шаблона. Этот класс использует форму подстановки во время компиляции для создания конкретного класса с заменой этих значений и токенов.
Именно этот конкретный класс используется для создания экземпляра вашего объекта(ов).
Однако вы пытаетесь использовать переменную времени выполнения для преобразования класса шаблона в конкретный класс, а это невозможно сделать во время компиляции - и тут в C++ нет такой вещи, как шаблон времени выполнения.
Вам необходимо переосмыслить методологию реализации.
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
- Ошибка Specified folder/zip file does not contain a valid library
спасибо за объяснение. Мое намерение состоит в том, чтобы иметь возможность определять размер буфера JSON. Есть ли способ сделать это так, как мне нужно?, @Guy . D
Я бы предложил создать объект JSON вне вашего класса и передать этот объект конструктору. Не зная, что ArduinoJSON делает с буфером и как он создается, я не могу комментировать., @Majenko
Хорошо, это был достаточно хороший обходной путь. ТНХ, @Guy . D