首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino:如何使用其他类的对象作为我库的参数?

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

Stack Overflow用户
提问于 2017-05-04 17:56:56
回答 2查看 1.7K关注 0票数 1

我想在我建的图书馆里用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的一部分留给您(顺便说一句,它可以将伺服变成物理按钮压榨机,但具有突发功能)。

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

代码语言:javascript
复制
/*
  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“是我库中的有效类型。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-04 18:00:45

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

*.h

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

代码语言:javascript
复制
Shutter::Shutter(Servo *servo) {
    _servo = servo;
}


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

使用:

代码语言:javascript
复制
Servo servo;
Shutter shuter(&servo)
票数 2
EN

Stack Overflow用户

发布于 2017-05-04 19:17:26

看起来问题是类名和#ifndef标记是相同的,因此在某种程度上存在名称冲突。这个线程很好地解释了这一点:How to properly use a header file to be a complete class?

修正后,它编译得很好。

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

https://stackoverflow.com/questions/43789757

复制
相关文章

相似问题

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