Активация определенного макроса в классе из main.cpp
Извините, если этот вопрос был задан. Я пытаюсь активировать определенную функцию в классе с помощью макроса, определенного в классе из main.cpp. Я использую библиотеку jrowberg MPU6050, если это имеет значение.
main.cpp
#include "gyro.h"
gyro gyro(Serial);
#define OUTPUT_READABLE_EULER
void setup(){
...
}
void loop(){
...
}
gyro.cpp
#include "gyro.h"
#ifdef OUTPUT_READABLE_EULER
// display Euler angles in degrees
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetEuler(euler, &q);
serial_.print("euler\t");
serial_.print(euler[0] * 180/M_PI);
serial_.print("\t");
serial_.print(euler[1] * 180/M_PI);
serial_.print("\t");
serial_.println(euler[2] * 180/M_PI);
#endif
Если я определяю OUTPUT_READABLE_EULER
в gyro.h
, он работает. Но я хочу сделать это из main.cpp.
@zaraku27, 👍2
Обсуждение1 ответ
Вы не можете этого не делать, но также не следует пытаться определить макрос в файле cpp и использовать его в другом файле cpp.
Вместо этого вы должны определить его в файле h (заголовок), который включен в оба файла cpp.
Почему бы вам определить это в main.cpp
или main.h
в любом случае, если вы не используете его в этих файлах?
У вас есть в основном три варианта:
- Определите его в
gyro.h
, чтобы включить его вgyro.cpp
где вы его используете. Позже вы можете использовать его и в других файлах. - Определите это в
gyro.cpp
таким образом, вы можете использовать его только в этом файле. Это предотвращает использование макроса в других файлах (что может быть безопаснее). - Определите его в отдельном файле, например
euler.h
, и включите этот файл заголовка везде, где он вам нужен.
Смотрите также комментарии Юрая ниже.
это применимо, если определение должно содержаться в исходном файле. этот тип определений обычно устанавливается в командной строке компилятора как-D. в Arduino IDE нет-D, определяющей конфигурацию для проекта., @Juraj
@Juraj в этом случае можно было бы создать определенный файл заголовка с этими макросами (в данном случае один) и включить их в каждый файл., @Michel Keijzers
ДА. именно так, если макрос должен использоваться только в файлах скетча (проекта). неудобно это для библиотек. затем пользователь должен перейти в папку библиотеки и изменить там файл, но тогда это применимо ко всем проектам. если параметр относится к конкретным платам или у вас есть индивидуальное определение платы для проекта, то-D можно задать в boards.local.txt как build.extra_flags. например, в Eclipse-D можно установить в настройках проекта, @Juraj
@Juraj Спасибо за дополнительную информацию. Однако, я думаю, это не работает в среде IDE ?(поскольку IDE Arduino не основана на eclipse), @Michel Keijzers
- Не могу вызывать указатели функций С++ из встроенной сборки
- Конечный автомат C++ / Wpmf-конверсия
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
Попробуйте поместить определение перед включением файла., @Delta_G