gpt4 book ai didi

c++ - 多重定义错误——Arduino 库

转载 作者:行者123 更新时间:2023-11-28 00:28:22 25 4
gpt4 key购买 nike

我正在为 Arduino 构建一个基本的电机库。我正在尝试使用草图 motordrivertest.ino 对其进行测试,但我不断收到整个电机类及其所有方法的多重定义错误。我想知道如何修复这些错误。 (我使用的是 MAC OS X 10.9.3)

这是我的错误。

MotorDriver/motordriver.cpp.o: In function `Motor::getSpeed()':
/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:49: multiple definition of `Motor::getSpeed()'
motordrivertest.cpp.o:/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:49: first defined here
MotorDriver/motordriver.cpp.o: In function `Motor::setSpeed(int)':
/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:33: multiple definition of `Motor::setSpeed(int)'
motordrivertest.cpp.o:/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:33: first defined here
MotorDriver/motordriver.cpp.o: In function `Motor':
/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:15: multiple definition of `Motor::Motor(char)'
motordrivertest.cpp.o:/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:15: first defined here
MotorDriver/motordriver.cpp.o: In function `Motor':
/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:15: multiple definition of `Motor::Motor(char)'
motordrivertest.cpp.o:/Users/pattyborgman/Documents/Arduino/libraries/MotorDriver/motordriver.cpp:15: first defined here

这是我的草图、.h 文件和 .cpp 文件。

motordrivertest.ino

#include "motordriver.h"
#include "motordriver.cpp"

Motor motor('a');

void setup(){}

void loop()
{
motor.setSpeed(125);
delay(3000);
motor.setSpeed(-125);
delay(3000);
}

电机驱动.h

#ifndef motordriver_h
#define motordriver_h

#include "Arduino.h"

class Motor
{
public:
Motor(char letter);
void setSpeed(int speed);
int getSpeed();
private:
int currentSpeed;
int PWM;
int BRK;
int DIR;

};

#endif

电机驱动.cpp

#include "Arduino.h"
#include "motordriver.h"

Motor::Motor(char letter)
{
if (letter=='a') {
int PWM = 3;
int BRK = 9;
int DIR = 12;
pinMode(PWM, OUTPUT);
pinMode(BRK, OUTPUT);
pinMode(DIR, OUTPUT);
} else {
int PWM = 11;
int BRK = 8;
int DIR = 13;
pinMode(PWM, OUTPUT);
pinMode(BRK, OUTPUT);
pinMode(DIR, OUTPUT);
}

}

void Motor::setSpeed(int speed)
{
currentSpeed=speed;
if (speed >= 0) {
analogWrite(PWM, speed);
digitalWrite(BRK, LOW);
digitalWrite(DIR, HIGH);
}else {
int _speed = -speed;
analogWrite(PWM, _speed);
digitalWrite(BRK, LOW);
digitalWrite(DIR, LOW);
}

}

int Motor::getSpeed()
{
return currentSpeed;
}

最佳答案

避免此类错误的简单规则:

  • 永远不要#include a .cpp 文件
  • 如果你在头文件中实现函数或方法,在它们前面写上inline(模板除外,它们默认是inline)

C(++)-Source-Code 编译成目标文件。对于每个 .cpp 文件,都会生成一个目标文件。这些文件将包含您的函数/方法的机器代码。包含源文件将使您在多个目标文件中具有相同的功能。编译器没问题。编译器运行后,链接器将完成其工作,将所有目标文件和静态库组合成一个可执行文件。现在它找到了几个同名的函数。那它应该怎么办呢?它会通知您它遇到的错误并退出。

关于c++ - 多重定义错误——Arduino 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23965050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com