Не получается использовать String в Namespace.h. Библиотека с файлом настроек.
- Войдите на сайт для отправки комментариев
Сб, 06/08/2022 - 03:56
Не получается использовать String в Namespace.h. Вопрос к знатокам.
Пытаюсь делать отдельный файл, в котором будут переменные, включая массив строк. Доступ к переменным нужен из библиотеки, к enum как из библиотеки так и из основного кода main.ino. Однако именно String не компилируется ругаясь на множественное объявление.
main.ino
#include "Namespace.h" using namespace ns; #include "my_class.h" my_class one(appl); void setup(){} void loop(){}
my_class.h
#ifndef my_class_h #define my_class_h class my_class{ public: my_class (uint8_t val); a my_struct; }; #endif
my_class.cpp
#include <Arduino.h> #include "Namespace.h" using namespace ns; #include "my_class.h" my_class:: my_class (uint8_t val) { my_struct.b = pen; }
Namespace.h
#ifndef NS__ #define NS__ #include <Arduino.h> namespace ns{ struct a {uint8_t b;}; enum c{appl, pen}; String d; //Стоит закомментировать и все собирается } #endif
Лог компиляции:
my_class.cpp.o (symbol from plugin): In function `ns::d': (.text+0x0): multiple definition of `ns::d' .pio\build\nanoatmega328\src\main.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status *** [.pio\build\nanoatmega328\firmware.elf] Error 1
Делаю переменные в файл так как библиотека состоит из двух классов. В каждом классе не должно быть путаницы с переменными и названиями enum.
Не объявление, а определение. Разберись в разнице между этими двумя вещами - вопрос закроется.
rkit, благодарю. Получилось. Однако файл пришлось разделить на два.
extern String d; в h файле и
String d = "Hallo"; в одноименном cpp файле.