Arduino:如何使用其他类的对象作为我的库的参数?
我正在试图在我创建的库中使用Servo.h。编译器一直给我提供相同的错误,就好像它不能识别包含在我的库中的类。Arduino:如何使用其他类的对象作为我的库的参数?
我想创建一个新类,它的一个属性是一个伺服对象,我应该在构造函数中传递它。不管我如何努力,我不断收到同样的错误信息试图编译我的草图时:
In file included from /home/nezah/Arduino/My sketches/CameraShutter/CameraShutter.ino:8:0: /home/nezah/Arduino/libraries/Shutter/Shutter.h:13:19: error: expected ')' before '*' token Shutter(Servo *servo);
看来,包括语句是好的,因为我得到了不同的消息,如果我惹它出问题或完全删除它。我已尝试更改“”为<>,甚至将源复制到文件夹中并使用完整路径。只要我不把它弄糊涂(故意)就没有改变。我已经阅读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;
}
注意:如果我删除了一些代码,并带走构造的“伺服”的一部分,我上“getServo的错误信息( )“代码。这个问题似乎是编译器不能将“Servo”识别为我的库中的有效类型。
在此先感谢!
在你的类的构造函数中传递了一个类型为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)
貌似问题是,类名和#ifndef标记是相同的,所以有某种名称冲突。正是在这个主题很好的解释:How to properly use a header file to be a complete class?
固定在此之后,它编译良好。
首先,非常感谢您的帮助!我想你告诉我,但仍然得到同样的错误信息:'在文件从/家/ nezah/Arduino的/我的素描/ CameraShutter/CameraShutter.ino包括:1:0: /家庭/ nezah/Arduino的/库/快门/ Shutter.h:12:19:错误:预期 ')' 前 '*' 标记 快门(伺服*伺服);'。我会问:有什么我必须做的IDE到包括图书馆伺服?我以前在草图中使用过,但在图书馆中没有。 – nezah
如果我的回答对您有帮助,请将其标记为正确。 – eyllanesc
您的回答帮助我纠正了代码,这是一团糟,但并没有真正解决问题。无论如何,给我提示找到解决办法,我想。再次感谢!! – nezah