无效使用无效表达式,怎么办? [关闭]
Posted
技术标签:
【中文标题】无效使用无效表达式,怎么办? [关闭]【英文标题】:invalid use of void expression, what how? [closed] 【发布时间】:2016-11-20 05:14:15 【问题描述】:不知道为什么会这样。
该程序是一个编码错误的鼹鼠游戏,可在 Arduino Uno 上运行。
我的 IED 是 Arduino IED 版本 1.6.12
是的,它还有很多内容,但如果您想查看所有代码,请直接询问。
错误
Arduino: 1.6.12 (Windows 7), Board: "Arduino/Genuino Uno"
C:\Users\Strings\Documents\Arduino\Too_Many_Moles\Too_Many_Moles.ino: In function 'void winOrLost()':
Too_Many_Moles:146: error: invalid use of void expression
timelyCall(current_millis, toggleBuzer(), 1000);
^
C:\Users\Strings\Documents\Arduino\Too_Many_Moles\Too_Many_Moles.ino: In function 'void loop()':
Too_Many_Moles:191: error: invalid use of void expression
timelyCall(current_millis, popAMole(), time_interval);
^
exit status 1
invalid use of void expression
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Main.ino
const int buzer = A0, on_off_pin = A1;
unsigned long current_millis;
const int time_interval = 20;
int currentMole = 0;
int points = 0, lives = 3, level = 0, odds_of_pop_up = 6;
mole moles[6] =
mole( 2, 8 ),
mole( 3, 9 ),
mole( 4, 10 ),
mole( 5, 11 ),
mole( 6, 12 ),
mole( 7, 13 )
;
int number_of_mole = sizeof(moles) / sizeof(*moles);
void timelyCall(unsigned long currentMillis, void (&f)(), int ms)
if (millis() - currentMillis > ms)
f();
currentMillis = millis();
void popAMole()
if (moles[currentMole].isReadyToPop())
moles[currentMole].popUp(odds_of_pop_up);
if (currentMole + 1 <= number_of_mole)
currentMole = 0;
else
currentMole++;
mole.h
#ifndef mole_h
#define mole_h
#include "Arduino.h"
class mole
public:
mole(int p_out, int p_in);
void resetMole();
void popUp(int odds);
boolean moleGetHit();
boolean isReadyToPop();
void setUpTimer(int up_timer);
int getUpTimer();
void decrementUpTimer();
void setRecoveryTimer(int recovery_timer);
int getRecoveryTimer();
void decrementRecoveryTimer();
void addRecoveryTimer(int add_time);
boolean getSouldBeUp();
int getOddsOfPopinh();
void setOddsOfPopinh(int odds);
int getPinIn();
private:
boolean _sould_be_up = false;
int _up_timer = 0;
int _recovery_timer = 0;
int _pin_out;
int _pin_in;
int _odds_of_poping = 10;
;
#endif
mole.cpp
boolean mole::isReadyToPop()
if (_recovery_timer == 0 && _sould_be_up = false)
return true;
else
return false;
void mole::popUp(int odds)
if (rand() % odds + 1 == 1)
digitalWrite(_pin_out, HIGH)
_sould_be_up = true;
【问题讨论】:
能否提供发生错误的代码?你知道,例如Too_Many_Moles:146:
。
大声笑,“Arduino IED”,会在某处引发一些危险信号。
【参考方案1】:
您调用的函数没有将地址传递给timelyCall
!
timelyCall(current_millis, popAMole(), time_interval);
timelyCall(current_millis, toggleBuzer(), 1000);
应该是:
timelyCall(current_millis, popAMole, time_interval);
timelyCall(current_millis, toggleBuzer, 1000);
注意popAMole
和toggleBuzer
上没有括号。
【讨论】:
以上是关于无效使用无效表达式,怎么办? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章