我是一个相当有经验的.net开发人员,但是对于Arduino和C/C++来说,我正尝试创建我的第一个库,这是7段LED显示屏的简单驱动程序。我有许多顽固的编译器错误,但本着一件事的精神,这是第一次。我想为我的类添加一个无参数的构造函数,并且当我编译的库很好时,但是当我尝试在草图中使用该类时,编译器向我提供了'''seSegmentLed'中成员'setDigit'的相当钝的请求,非类类型“SevenSegmentLed()”无参数构造函数
最简单的例子代码如下:
#ifndef SevenSegmentLed_h
#define SevenSegmentLed_h
#include "Arduino.h"
class SevenSegmentLed
{
public:
void setDigit(int digit);
SevenSegmentLed();
};
#endif
#include "Arduino.h"
#include "SevenSegmentLed.h"
SevenSegmentLed::SevenSegmentLed()
{
}
void SevenSegmentLed::setDigit(int digit)
{
}
#include "SevenSegmentLed.h"
SevenSegmentLed sevenSegmentLed();
void setup() {
sevenSegmentLed.setDigit(4);
}
void loop() {
// put your main code here, to run repeatedly:
}
然而如果我改变构造签名:SevenSegmentLed(int wtf);
并且因此它实例:SevenSegmentLed sevenSegmentLed(1);
它编译就好了。正如参数所说,WTF?
看起来像最令人头疼的解析的情况下,我可能会添加的东西不会出现在C#中。 'SevenSegmentLed sevenSegmentLed();'这被编译器解释为函数声明。 – shuttle87
谢谢我认为它是这样的,那么我该怎么做呢? –
顺便说一句,即使你有正确的语法,全局变量*很少*(我几乎想说永远不会)在C++中的一个好主意。 –