我想在我建的图书馆里用Servo.h打破我的头。编译器总是给出相同的错误,就好像它不识别类一样,这个类包含在我的库中。
我正在尝试创建一个新的类,它的一个属性是一个Servo对象,我应该在构造函数中传递它。无论我如何尝试,在编译我的草图时,我总是收到相同的错误消息:
在包含在/home/nezah/Arduino/My草图/CameraShutter/CameraShutter.ino:8:0: /home/nezah/Arduino/libraries/Shutter/Shutter.h:13:19:错误:预期')‘之前的文件中(伺服*伺服);
它似乎是包含语句是好的,因为我得到了一个不同的消息,如果我把它搞砸了,或完全删除它。我已经尝试为<>更改"“,甚至在文件夹中复制源代码并使用完整的路径。只要我不(故意)搞砸它,就不会有任何变化。我已经看过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“是我库中的有效类型。
提前感谢!
发布于 2017-05-04 18:00:45
在类的构造函数中,您要传递一个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)发布于 2017-05-04 19:17:26
看起来问题是类名和#ifndef标记是相同的,因此在某种程度上存在名称冲突。这个线程很好地解释了这一点:How to properly use a header file to be a complete class?
修正后,它编译得很好。
https://stackoverflow.com/questions/43789757
复制相似问题