Я в основном пытаюсь инициализировать внешний класс, чтобы использовать его в качестве члена во всех моих методах.
То, что я пробовал:
error: 'RECV_PIN_1' is not a type
)Здесь мой сокращенный код:
// Receiver.h
#include "Arduino.h"
#include "IRremote.h"
class Receiver {
public:
Receiver();
void tick();
private:
static const int LED_PIN = 13;
static const int RECV_PIN_1 = 11;
static const int MAX_HEALTH = 1000;
// [..]
IRrecv irrecv(RECV_PIN_1); // this does not work
// [..]
};
// Receiver.cpp
#include "Arduino.h"
#include "IRremote.h"
#include "Receiver.h"
Receiver::Receiver() {
// [..]
}
void Receiver::tick() {
checkHitIndicator();
// if there is a result
if (irrecv.decode(&results)) {
playerHitDetected(10);
// receive the next value
irrecv.resume();
}
}
Было бы неплохо, если бы кто-нибудь мог объяснить мне, как и почему это можно достичь.
Первый подход будет работать только в том случае, если ваш компилятор поддерживает инициализацию внутри класса С++ 11; и вам нужно инициализировать его с помощью =
или {}
, поскольку инициализация с ()
слишком похожа на объявление функции:
IRrecv irrecv{RECV_PIN_1}; // or
IRrecv irrecv = IRecv(RECV_PIN_1);
Второй подход должен быть точным; Я не знаю, почему это может быть недоступно в ваших методах, если вы объявили его (без инициализации) в определении класса
IRecv irrecv;
и инициализировал его в конструкторе
Receiver::Receiver() : irrecv(RECV_PIN_1) {
// [..]
}
undefined reference to
IRrecv :: IRrecv (int) '`