Использование функций в заголовочных файлах

arduino-ide error functions header

Я хочу включить функцию в свой скетч, который я переместил в файл .h.

Я сделал это следующим образом:

Мой код:

#include "header.h"

void setup() {
  fct();
}

void loop() {

}

Мой заголовок:

#include "Arduino.h"
#ifndef MYHELPERS_H
#define MYHELPERS_H

void fct() {
// stuff
}

#endif

Тот же процесс, кажется, работает для переменных, но IDE говорит, что эта функция не объявлена в этой области...

Я не понимаю, что я делаю не так...

Спасибо, ребята!

, 👍1

Обсуждение

для меня он компилируется. у вас есть файл заголовка как tab в IDE?, @Juraj

Где именно находится ваш заголовочный файл? В той же папке, что и основной скетч? Или в папке "Библиотеки"?, @chrisl

Это не тот способ, которым вы разделяете свой проект на модули. В заголовочном файле вы объявляете, что ваш модуль предлагает _publically_. Реализация переходит в другой файл C++ , и он будет скомпилирован отдельно. -- Пожалуйста, возьмите хорошую книгу по базовому программированию на C++ и/или Arduino и прочитайте ее. Этот вопрос слишком широк, чтобы ответить на вопрос SE/Arduino., @the busybee

Этот файл заголовка был создан с помощью кнопки "Новый файл" в редакторе Arduino и находится в той же папке, что и основной скетч., @Spyro 999

File->New, создает новый скетч, @Juraj


1 ответ


Лучший ответ:

0

Я нашел решение где-то еще в Интернете...

Эта часть:

#ifndef MYHELPERS_H
#define MYHELPERS_H

Было написано неправильно... "MYHELPERS_H" должен был быть заменен именем моего файла. Теперь это работает просто отлично.

,

нет никакой связи между именем макроса include guard и именем файла. этот ответ неверен., @Juraj

Это странно, но это решило мою проблему, @Spyro 999

Возможно, имя макроса guard должно совпадать с именем, используемым в #include основного скетча, но теперь это работает, я сделал это, @Spyro 999

нет. #включить принимает имя файла. и его не волнует содержимое файла, @Juraj

В любом случае, это сработало, @Spyro 999

так что измените его обратно, и вы увидите, что он все равно будет работать, @Juraj

Я сейчас в рабочей поездке, и мой компьютер дома, @Spyro 999