2016-11-20 5 views
0

Ich weiß nicht, warum ich das bekomme.ungültige Verwendung von void Ausdruck, wie?

Das Programm ist ein schlecht codierte Whack ein Maulwurf Spiel gemacht, um auf einem Arduino Uno zu laufen.

Mein IED ist Arduino IED Version 1.6.12

Ja, da es viel mehr ist, aber wählte es aus zu verlassen, wenn Sie den Code nur alle sehen wollen fragen.

Fehler

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; 
    } 
} 
+0

Können Sie den Code angeben, wo der Fehler aufgetreten ist? Du weißt zum Beispiel 'Too_Many_Moles: 146:'. – krzaq

+0

lol, "Arduino IED", werde irgendwo rote Flaggen aufstellen. –

Antwort

1

Sie sind die Funktionen nicht vorbei an den Adressen timelyCall ruft!

timelyCall(current_millis, popAMole(), time_interval); 
timelyCall(current_millis, toggleBuzer(), 1000); 

Sollte sein:

timelyCall(current_millis, popAMole, time_interval); 
timelyCall(current_millis, toggleBuzer, 1000); 

Hinweis keine Klammern auf popAMole & toggleBuzer.

Verwandte Themen