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) 
+0

首先,非常感谢您的帮助!我想你告诉我,但仍然得到同样的错误信息:'在文件从/家/ nezah/Arduino的/我的素描/ CameraShutter/CameraShutter.ino包括:1:0: /家庭/ nezah/Arduino的/库/快门/ Shutter.h:12:19:错误:预期 ')' 前 '*' 标记 快门(伺服*伺服);'。我会问:有什么我必须做的IDE到包括图书馆伺服?我以前在草图中使用过,但在图书馆中没有。 – nezah

+0

如果我的回答对您有帮助,请将其标记为正确。 – eyllanesc

+0

您的回答帮助我纠正了代码,这是一团糟,但并没有真正解决问题。无论如何,给我提示找到解决办法,我想。再次感谢!! – nezah

貌似问题是,类名和#ifndef标记是相同的,所以有某种名称冲突。正是在这个主题很好的解释:How to properly use a header file to be a complete class?

固定在此之后,它编译良好。