Не получается использовать 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 файле.