首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多定义错误-- Arduino库

多定义错误-- Arduino库
EN

Stack Overflow用户
提问于 2014-05-31 00:03:50
回答 1查看 4.3K关注 0票数 1

我正在为Arduino建造一个基本的汽车图书馆。我正在尝试用草图motordrivertest.ino测试它,并且我不断地得到我的整个电机类及其所有方法的多个定义错误。我想知道怎样才能纠正这些错误。(我使用的是MAC OS X 10.9.3)

这是我的错误。

代码语言:javascript
复制
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

代码语言:javascript
复制
#include "motordriver.h"
#include "motordriver.cpp"

Motor motor('a');

void setup(){}

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

motordriver.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-31 00:10:54

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

  • 永远不要包含.cpp文件
  • 如果在头文件中实现函数或方法,请在它们前面写内联(不包括模板,默认情况下它们是内联的)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23965050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档