String в многофайловом проекте
Пишу многофайловый проект в arduinoIDE.
Имеется главный файл mainFile.ino
и два модуля - f1.cpp
и functions.h
. Во всех модулях юзается связка:
#ifndef SOME_NAME
#define SOME_NAME
//код
#endif
Они связаны следующим образом: в mainFile.ino
включен functions.h
, а в functions.h
объявляется функция f1()
:
#ifndef F1
#define F1
void f1();
#endif
Реализация записана в f1.cpp и там также включен functions.h.
Проблема следующая: когда я объявляю переменную String s
в mainFile.ino
, всё компилится отлично, без добавления каких-либо библиотек. Но когда пытаюсь взаимодействовать со String (объявить переменную или добавить ее в качестве аргумента функции) в модулях f1.cpp
и functions.h
, компилятор пишет, что String was not declared in this score.
Добавление в модульные файлы
#include <string>
не помогло (что перед #ifndef/#define, что внутри).
Подскажите пожалуйста, в чем может быть проблема?
Ответы (2 шт):
Класс String
из библиотеки avr, определен в заголовочном файле WString.h, и он отличается от std::string
(из <string>
).
Мне сложно понять зачем они изобрели собственный тип, а не использовали стандартный.
В файле functions.h добавьте объявление #include <Arduino.h>
.
Файлы ino отличаются от файлов cpp тем что они менее строгие, препроцессор добавляет в них инклуды и объявления функций.
Я бы рекомендовал переписать ino на cpp когда разберешься с инклудами полностью.