我试图在我制作的图书馆内使用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”识别为我的库中的有效类型。
提前致谢!
答案 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?
修好后,编译得很好。