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を1回インクルードすることもできます。

于 2013-03-27T08:14:13.167 に答える
0

WBが提案したように、定義するすべてのヘッダーファイルにインクルードガードが必要です。

例のようなもの: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 に答える