0

基本上我有很多这样的错误:

    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>
4

3 回答 3

1

这可能是因为您的头文件被多次包含。你可以做的是这样定义警卫:

#ifndef SOMEVAR - *make sure the file is included only once in the current scope*
#define SOMEVAR
//Symbol definitions
#endif

或者,如果您的编译器支持,您可以在头文件中包含一次#pragma。

于 2013-03-27T08:14:13.167 回答
0

正如 WB 建议的那样,您需要为您定义的每个头文件包含保护

类似 Ex: Header.h

   #ifndef HEADER_H
   #define HEADER_H
   // Header stuff in here...  
   #endif
于 2013-03-27T08:22:36.930 回答
0

这已经晚了 7 年,但这就是我所做的

  1. 在我自己的mpu_sensor.h文件中,我只包括
#ifndef MPU_SENSOR_H
#define MPU_SENSOR_H

#include "MPU6050.h"
#include "helper_3dmath.h"
....
#endif

请注意,我没有MPU6050_6Axis_MotionApps20,因为大多数数据类型都是

  1. 在我的mpu_sensor.cpp文件中,这是我的包括:
#include "MPU6050_6Axis_MotionApps20.h"
#include "mpu_sensor.h"

请注意,MPU6050_6Axis_MotionApps20.h必须在我包含我自己的头文件之前。

现在可以了。我同意图书馆本身应该更新,但似乎作者在过去几年没有更新。

于 2020-10-19T23:32:03.343 回答