Arduino:如何使用其他类的对象作为我的库的参数?

时间:2017-05-04 17:56:56

标签: c++ arduino

我试图在我制作的图书馆内使用Servo.h。编译器一直给我同样的错误,好像它不能识别我的库中包含的类。

我正在尝试创建一个新类,其中一个属性是一个Servo对象,我应该在构造函数中传递它。无论我如何尝试,我在尝试编译草图时都会收到相同的错误消息:

  

在/ home / nezah / Arduino / My中包含的文件中   草图/ CameraShutter / CameraShutter.ino:8:0:   /home/nezah/Arduino/libraries/Shutter/Shutter.h:13:19:错误:预期   ')'之前'*'代币        快门(伺服*伺服);

似乎include语句没问题,因为如果我把它弄错了或者完全删除它,我会收到不同的消息。我已经尝试为<>更改“”甚至将源复制到文件夹中并使用完整路径。没有变化,只要我不弄乱它(故意)。我已经阅读了this

我还尝试使用Shutter(Servo* servo)Shutter(Servo *servo)Shutter(Servo& servo)将其作为指针传递。相同的错误消息。

在一些arduino.cc论坛中,我读到我宁愿忘记它并避免在其他库中使用库,但我敢打赌这是可能的。

有没有人能给我一些关于如何做到这一点的提示?

我留下你正在尝试编写的库的.h和.cpp的一部分(顺便说一下,它将伺服变成物理按钮压脚但具有突发能力)。

 /*
 * Shutter.h - Library to make a photocamera shutter out of a servo
 *   alternatively it could press any physical button with a servo.
 */

#ifndef Shutter
#define Shutter
#include "Servo.h"

class Shutter {
  public:
    Shutter(Servo *servo);
    Servo getServo();

    void shut();
  private:
    Servo _servo;        
}

#endif

这是我的.cpp:

/*
  Shutter.cpp - Library for flashing Shutter code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/

#include <Arduino.h>
#include "Servo.h"
#include "Shutter.h"

Shutter::Shutter(Servo *servo) {
    _servo = servo;
}

注意:如果我删除了一些代码并删除了构造函数的“Servo”部分,我会在“getServo()”代码中收到错误消息。问题似乎是编译器不能将“Servo”识别为我的库中的有效类型。

提前致谢!

2 个答案:

答案 0 :(得分:0)

在类的构造函数中,您传递的是Servo类型的指针,因此您必须将该值存储在另一个指针中。要做到这一点,你必须改变:

*的.h

#ifndef SHUTTER_H
#define SHUTTER_H
#include "Servo.h"

class Shutter {
  public:
    Shutter(Servo *servo);
    Servo *getServo() const;

    void shut();
  private:
    Servo *_servo;        
}

#endif

*。CPP

Shutter::Shutter(Servo *servo) {
    _servo = servo;
}


Servo *Shutter::getServo() const
{
    return _servo;
}

使用:

Servo servo;
Shutter shuter(&servo)

答案 1 :(得分:0)

看起来问题是类名和#ifndef标记是相同的,所以有某种名称冲突。这个帖子很好地解释了这个问题:How to properly use a header file to be a complete class?

修好后,编译得很好。