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 когда разберешься с инклудами полностью.