基本上我有很多这样的错误:
IMU/IMU.cpp.o: In function `MPU6050::dmpInitialize()':
Projects/Arduino/libraries/IMU/MPU6050_6Axis_MotionApps20.h:281: multiple definition of `MPU6050::dmpInitialize()'
Quadcopter.cpp.o:Projects/Arduino/libraries/IMU/MPU6050_6Axis_MotionApps20.h:281: first defined here
但我不知道如何解决这个问题。我已经查看了其他几个类似的问题,但没有找到与此代码相关的任何答案。
.ino
#include <Wire.h>
#include <IMU.h>
IMU imuController;
void setup() {
Wire.begin();
imuController.init();
}
IMU.h
#include "MPU6050_6Axis_MotionApps20.h"
MPU6050_6Axis_MotionApps20.h
#include "I2Cdev.h"
#include "helper_3dmath.h"
#include "MPU6050.h"
#include <avr/pgmspace.h>
MPU6050.h
#include "I2Cdev.h"
#include <avr/pgmspace.h>
答案 0 :(得分:1)
可能是因为您的头文件被多次包含。你可以做的是定义这样的守卫:
#ifndef SOMEVAR - *make sure the file is included only once in the current scope*
#define SOMEVAR
//Symbol definitions
#endif
或者你可以在头文件中包含#pragma一次,如果你的编译器支持它。
答案 1 :(得分:0)
正如W.B建议的那样,您定义的每个头文件都需要include guard。
喜欢的东西 例如:Header.h
#ifndef HEADER_H
#define HEADER_H
// Header stuff in here...
#endif
答案 2 :(得分:0)
这太晚了7年,但这就是我所做的
mpu_sensor.h
文件中,我仅包含#ifndef MPU_SENSOR_H
#define MPU_SENSOR_H
#include "MPU6050.h"
#include "helper_3dmath.h"
....
#endif
请注意,我不会MPU6050_6Axis_MotionApps20
,因为大多数数据类型都是
mpu_sensor.cpp
文件中,其中包括:#include "MPU6050_6Axis_MotionApps20.h"
#include "mpu_sensor.h"
请注意,MPU6050_6Axis_MotionApps20.h
必须在包含我自己的头文件之前。
现在可以使用。 我同意应该对库本身进行更新,但是似乎作者在过去几年中没有更新。