このコードは、Visual Microのアドインfor Arduinoを使用してVS2015で開発され、arduinoプログラムの一部です。これはArduino stackexchangeサイトにも最小限のレスポンスで投稿されました。C++の関数でenumを使用
を考えると、次の列挙型
enum RelayState { RELAY_OFF = HIGH, RELAY_ON = LOW };
enum class CrossingZoneState: uint8_t {
CROSSINGZONE_CLEAR = 0, // no train in crossing area, also initialized state
CROSSINGZONE_OCCUPIED = 1, // train detected by the entry sensor
CROSSINGZONE_EXITING = 2 // train detected by the exit sensor, when sensor clears, state= Clear
};
どこRELAY_OFF = HIGH、HIGHは、私が想定します。#define HIGH 0x1のは、C++/Arduinoの定数でありますか?私はそれを定義しなかったので。そして、RELAY_ON = LOW、LOWは0x0です。
次の関数では、次のエラーが発生します。
CrossingZoneState CheckEntrySensor(uint8_t esp) {
//esp, short for entry sensor pin
if (digitalRead(esp) == HIGH)
{
state = CrossingZoneState::CROSSINGZONE_CLEAR;
return state;
}
else if (digitalRead(esp) == LOW)
{
state = CrossingZoneState::CROSSINGZONE_OCCUPIED;
return state;
}
// if the digital read errs, return the current state so it re-runs
return state;
};
boolean throwRelayAndCheckStatus(uint8_t relayNumber, RelayState relayState) {
int testInt = 0;
if (relayState == RelayState::RELAY_OFF)
{
testInt = 1;
}
digitalWrite(relayNumber, relayState);
if (digitalRead(relayNumber) == testInt) {
return true;
};
return false;
};
RelayStateを列挙型クラスにすることも試みましたが、同様の型エラーが発生しました。上記のコードでVS2015からのエラーがあります。
Compiling debug version of 'ModelRRXingStateMachine' for 'Arduino/Genuino Uno' ModelRRXingStateMachine.ino:11:55: error: 'RelayState' has not been declared :boolean throwRelayAndCheckStatus(uint8_t relayNumber, RelayState relayState) ModelRRXingStateMachine.ino:2:1: error: 'CrossingZoneState' does not name a type :CrossingZoneState CheckEntrySensor(byte esp) Error compiling project sources
(ModelRRXingStateMachineは、ファイルの名前です)私は通常ので、私は、コンパイラはここで探しているものはわからないんだけど、C#またはVB.Netへの書き込み、プロのプログラマーではないんだとC++に新しいです両方の列挙型が宣言され、1つが型付きで宣言されます。また、VSコードエディタにエラーが表示されていないため、ビルドしようとすると、上記のエラーがエラーウィンドウに表示されます。
が、それは 'RelayState'は' throwRelayAndCheckStatus'がコンパイルされた時点で宣言されていない、と似たような状況は、おそらくであることを言えば十分'CrossingZoneState'と' CheckEntrySensor'に対して真です。特に 'relayState'を' digitalWrite'が予期しているものにキャストしていないので、それ以上の問題があるかもしれません。 – MBraedley
両方のenumがすべてのinclude文の後に宣言されていますが、関数の前にコンパイルされていない可能性はありますか?必要に応じて、プログラム全体がかなり長い間それを投稿します。 digitalWriteはHIGHまたはLOWをとり、それが渡されます。 – dinotom
同じ名前空間の同じ.cppファイルで宣言されていますか?それらはそれらを使用する機能の前に宣言されていますか? –