Arduino编译器抛出"invalid type argument of unary *"

Arduino compiler throws "invalid type argument of unary *"

本文关键字:argument of unary type invalid 编译器 Arduino      更新时间:2023-10-16

我正在尝试编程一个非阻塞的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

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

pTimer->checkTimer()具有类型boolean

所以这个:

*pTimer->checkTimer()

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

其他函数也是如此,为什么要使用*运算符?这是不正确的:

*pTimer->start();

这是正确的:

pTimer->start();

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

您使用两种类型的指针去引用。首先使用->访问pTimer结构成员,然后对非指针类型(checkTimer返回的boolean)再次使用*。去掉星号,它就可以工作了。