Создать член из внешнего класса

0

Я в основном пытаюсь инициализировать внешний класс, чтобы использовать его в качестве члена во всех моих методах.

То, что я пробовал:

  • Инициализировать элемент в файле заголовка (Ошибка: 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();
    }
}

Было бы неплохо, если бы кто-нибудь мог объяснить мне, как и почему это можно достичь.

Теги:

1 ответ

0
Лучший ответ

Первый подход будет работать только в том случае, если ваш компилятор поддерживает инициализацию внутри класса С++ 11; и вам нужно инициализировать его с помощью = или {}, поскольку инициализация с () слишком похожа на объявление функции:

IRrecv irrecv{RECV_PIN_1};  // or
IRrecv irrecv = IRecv(RECV_PIN_1);

Второй подход должен быть точным; Я не знаю, почему это может быть недоступно в ваших методах, если вы объявили его (без инициализации) в определении класса

IRecv irrecv;

и инициализировал его в конструкторе

Receiver::Receiver() : irrecv(RECV_PIN_1) {
    // [..]
}
  • 0
    Привет, первый подход не поддерживается моим компилятором. Второй бросает загадочную ошибку undefined reference to IRrecv :: IRrecv (int) '`
  • 0
    @JulianHollmann: Во-вторых, это было стандартным с незапамятных времен.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню