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 шт):

Автор решения: Chorkov

Класс String из библиотеки avr, определен в заголовочном файле WString.h, и он отличается от std::string (из <string>). Мне сложно понять зачем они изобрели собственный тип, а не использовали стандартный.

→ Ссылка
Автор решения: eri

В файле functions.h добавьте объявление #include <Arduino.h>.

Файлы ino отличаются от файлов cpp тем что они менее строгие, препроцессор добавляет в них инклуды и объявления функций.

Я бы рекомендовал переписать ino на cpp когда разберешься с инклудами полностью.

→ Ссылка