C++ 多定义错误--Arduino库
我正在为Arduino建造一个基本的马达库。我正在尝试使用sketch motordrivertest.ino对其进行测试,我不断得到整个motor类及其所有方法的多定义错误。我想知道如何修复这些错误。(我正在使用MAC OS X 10.9.3) 这是我的错误C++ 多定义错误--Arduino库,c++,arduino,C++,Arduino,我正在为Arduino建造一个基本的马达库。我正在尝试使用sketch motordrivertest.ino对其进行测试,我不断得到整个motor类及其所有方法的多定义错误。我想知道如何修复这些错误。(我正在使用MAC OS X 10.9.3) 这是我的错误 MotorDriver/motordriver.cpp.o: In function `Motor::getSpeed()': /Users/pattyborgman/Documents/Arduino/libraries/MotorDr
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文件
伊诺汽车旅馆
#include "motordriver.h"
#include "motordriver.cpp"
Motor motor('a');
void setup(){}
void loop()
{
motor.setSpeed(125);
delay(3000);
motor.setSpeed(-125);
delay(3000);
}
司机
#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
motordriver.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;
}
避免此类错误的简单规则:
- 永远不要包含.cpp文件
- 如果在头文件中实现函数或方法,请在它们前面写内联(不包括模板,默认情况下它们是内联的)
C(++)-源代码编译成目标文件。对于每个.cpp文件,将生成一个对象文件。这些文件将包含函数/方法的机器代码。包含源文件将在多个目标文件中提供相同的功能。编译器没有问题。编译器运行后,链接器将完成将所有对象文件和静态库合并到可执行文件的工作。现在它找到了几个同名的函数。那么它应该做什么呢?它会通知您遇到和退出的错误。避免此类错误的简单规则:
- 永远不要包含.cpp文件
- 如果在头文件中实现函数或方法,请在它们前面写内联(不包括模板,默认情况下它们是内联的)
C(++)-源代码编译成目标文件。对于每个.cpp文件,将生成一个对象文件。这些文件将包含函数/方法的机器代码。包含源文件将在多个目标文件中提供相同的功能。编译器没有问题。编译器运行后,链接器将完成将所有对象文件和静态库合并到可执行文件的工作。现在它找到了几个同名的函数。那么它应该做什么呢?它会通知您遇到和退出的错误。避免此类错误的简单规则:
- 永远不要包含.cpp文件
- 如果在头文件中实现函数或方法,请在它们前面写内联(不包括模板,默认情况下它们是内联的)
C(++)-源代码编译成目标文件。对于每个.cpp文件,将生成一个对象文件。这些文件将包含函数/方法的机器代码。包含源文件将在多个目标文件中提供相同的功能。编译器没有问题。编译器运行后,链接器将完成将所有对象文件和静态库合并到可执行文件的工作。现在它找到了几个同名的函数。那么它应该做什么呢?它会通知您遇到和退出的错误。避免此类错误的简单规则:
- 永远不要包含.cpp文件
- 如果在头文件中实现函数或方法,请在它们前面写内联(不包括模板,默认情况下它们是内联的)
C(++)-源代码编译成目标文件。对于每个.cpp文件,将生成一个对象文件。这些文件将包含函数/方法的机器代码。包含源文件将在多个目标文件中提供相同的功能。编译器没有问题。编译器运行后,链接器将完成将所有对象文件和静态库合并到可执行文件的工作。现在它找到了几个同名的函数。那么它应该做什么呢?它会通知您遇到并退出的错误。当您在Arduino项目中意外地将库文件(.h和.cpp)的副本与.ino文件放在一起时,也会出现相同的问题。当您意外地将库文件(.h和.cpp)的副本放在一起时,也会出现相同的问题使用Arduino项目中的.ino文件。如果在Arduino项目中意外地将库文件(.h和.cpp)的副本与.ino文件放在一起,则会出现相同的问题。如果在Arduino项目中意外地将库文件(.h和.cpp)的副本与.ino文件放在一起,则会出现相同的问题。