Arduino编译器抛出“一元*的无效类型参数”

时间:2013-02-21 20:53:24

标签: c++ arduino nonblocking

我正在尝试编程非阻塞LED闪烁。

因此,我编写了一个小课程:

03: class timer {
04: private:  
05:   int startMillis;
06:   int delayMillis;  
07: public:  
08:  timer ( int pDelay ) {
09:    reset ( pDelay );
10:  }  
11:  void start () {
12:    startMillis = millis();
13:   }  
14:   void reset ( int pDelay ) {
15:     delayMillis = pDelay;    
16:   }  
17:   boolean checkTimer () {
18:     if ( (millis() - startMillis) >= delayMillis ) {
19:       return true;
20:     } else {
21:       return false;
22:     }
23:   }
24: };

然后我想在loop()中做这样的事情:

42: void switchLed (int *pPin, timer *pTimer) {
43:   if ( (*pTimer->checkTimer()) == true ) {
44:     if ( bitRead(PORTD, *pPin) == HIGH ) {
45:       digitalWrite(*pPin, LOW);
46:     } else {      
47:       digitalWrite(*pPin, HIGH);
48:     }
49:     *pTimer->start();
50:   }
51: }

我使用参数“(& led [0],& ledTimer01)”调用loop()中的switchLed()函数。 我认为它应该可行,但我的编译器说

nonblockingblink:5: error: 'timer' has not been declared
nonblockingblink.ino: In function 'void switchLed(int*, timer*)':
nonblockingblink:43: error: invalid type argument of 'unary *'
nonblockingblink:49: error: void value not ignored as it ought to be

问题出在哪里? 谢谢你的帮助:)。

2 个答案:

答案 0 :(得分:1)

pTimer->checkTimer()的类型为boolean

所以这个:

*pTimer->checkTimer()

无效,因为boolean不是指针类型。

其他功能相同,为什么使用*运算符? 这是不正确的:

*pTimer->start();

这是正确的:

pTimer->start();

(*pTimer).start();  // equivalent to above, prefer the above form

答案 1 :(得分:1)

您使用两种类型的指针解除引用。首先使用->访问pTimer结构成员,然后再次使用*非指针类型(boolean返回checkTimer) 。删除星号,它应该工作。