在两个不同的.o文件中多个函数的多个定义。

时间:2013-03-27 08:09:50

标签: c++ arduino

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

    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>

3 个答案:

答案 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年,但这就是我所做的

  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必须在包含我自己的头文件之前。

现在可以使用。 我同意应该对库本身进行更新,但是似乎作者在过去几年中没有更新。