2016-12-02 12 views
1

インスタンス数またはクラスmole2がいくつあるかを数えて、その数値をpublic_state変数mole_countに格納しようとしています。'='トークン/オブジェクトカウンター変数の前に宣言されたqualified-id

mole2.h

#ifndef mole2_h 
#define mole2_h 

#include "Arduino.h" 
class mole2 { 
    public: 
    mole2(int input, int output); 
    void popUp(); 
    void popdown(); 
    boolean moleBrainThinkPopUpNow(); 
    void setUpTimer(int up_timer); 
    boolean didMoleGetHit(); 
    void setRecoveryTimer(int recovery_timer); 
    void decrementRecoveryTimer(); 
    boolean dosePlayerMistMole(); 
    void moleReset(); 

    int input, output; 
    static int mole_count; 
    static int odds_of_poping; 

    private: 
    boolean _is_popped = false; 

    int _up_timer = 0; 
    int _recovery_timer = 0; 

}; 
#endif 

mole2.cpp

#include "Arduino.h" 
#include "mole2.h" 

int mole2::odds_of_poping = 10; 

mole2::mole2(int input, int output) { 
    input = input; 
    output = output; 
    int mole2::mole_count = mole2::mole_count + 1; 
    pinMode(input, INPUT); 
    pinMode(output, OUTPUT); 
} 

void mole2::popUp() { 
    _is_popped = true; 
    digitalWrite(input, HIGH); 
} 

void mole2::popdown() { 
    _is_popped = false; 
    digitalWrite(input, LOW); 
} 


boolean mole2::moleBrainThinkPopUpNow() { 
    if (_recovery_timer == 0 && _is_popped == false && rand() % odds_of_poping == 1) { 
    popUp(); 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

void mole2::setUpTimer(int up_timer) { 
    _up_timer = up_timer; 
} 

boolean mole2::didMoleGetHit() { 
    if (_is_popped == true && digitalRead(input) == HIGH) { 
    popdown(); 
    _up_timer = 0; 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

void mole2::setRecoveryTimer(int recovery_timer) { 
    _recovery_timer = recovery_timer; 
} 

void mole2::decrementRecoveryTimer() { 
    if (_recovery_timer > 0) { 
    _recovery_timer--; 
    } 
} 

boolean mole2::dosePlayerMistMole() { 
    if (_is_popped == true && _up_timer > 0) { 
    _up_timer--; 
    } 
    if (_is_popped == true && _up_timer == 0) { 
    popdown(); 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

void mole2::moleReset() { 
    popdown(); 
    _up_timer = 0; 
    _recovery_timer = 0; 
} 

FullError

012この
Arduino: 1.6.12 (Windows 7), Board: "Arduino/Genuino Uno" 

C:\Users\Strings\Documents\Arduino\libraries\mole2\mole2.cpp: In constructor 'mole2::mole2(int, int)': 

C:\Users\Strings\Documents\Arduino\libraries\mole2\mole2.cpp:9:25: error: qualified-id in declaration before '=' token 

    int mole2::mole_count = mole2::mole_count + 1; 

         ^

exit status 1 
Error compiling for board Arduino/Genuino Uno. 

This report would have more information with 
"Show verbose output during compilation" 
option enabled in File -> Preferences. 
+0

ここで、「mole_count」を定義しますか?私は 'odds_of_poping'を定義していますが、' mole_count'は表示されません。 – NathanOliver

答えて

0

まず:

int mole2::mole_count = mole2::mole_count + 1; 

はセンスがないの:あなたが何かを宣言し、とにかくその値+ 1

に割り当てている、あなたはすでにあなたのクラスでmole_countを宣言しました。

また
mole_count++; 

、あなたがストレージを宣言する必要があります:あなたは、コンストラクタにいるので、あなたがちょうどしなければならないので、(「有資格-ID」ビットはここから来ている)、既にmole2クラスにしていますた.cppクラスに変数の&はそれを初期化します。

int mole2::mole_count = 0; 
0

あなたはodds_of_popingと同じことを行う必要があります:

定義:

int mole2::mole_count = 0; // initialization can be ommited as static variables are initialized to the default value 

以降だけインクリメント:++mole_count;

0

int mole2::mole_countはすでに定義されています。これは別のint mole2::mole_countを作りようとしています。 intを失い、既存の変数に割り当てます。

また、mole_countの記憶域を割り当てて初期化する必要があります。 mole2.cpp

にどこかの周り

int mole2::odds_of_poping = 10; 

int mole2::mole_count = 0; // replace 0 if starting with more than 0 mole2s 

を置きます。また、コンパイラはあなたが合格を使用するかどうか分かりません

input = input; 
output = output; 

に気を付けますパラメータinputまたはクラスのinputに設定されているため、最も近い定義済み01 =、=の両側のパラメータ。同時に同じ場所で同じ変数名を再利用しないようにします。

この

は、明示的に

this->input = input; 
this->output = output; 

か示すことによって解決することができます(私のお気に入りを!)あなたはまだ名前を繰り返してはならない他の混同を防ぐためにmember initializer list

mole2::mole2(int input, int output): input(input), output(output) { 

しかしを使用することによって。

関連する問題