Инициализация объекта как члена класса приводит к ошибке связывания?
Я немного ошеломлен тем, почему это не работает. Я продолжаю получать следующую ошибку компоновщика:
In file included from src\ac.cpp:1:0:
src/ac.h:9:21: error: expected identifier before numeric constant
#define RECEIVE_PIN 0
^
src/ac.h:14:26: note: in expansion of macro 'RECEIVE_PIN'
static IRrecv irrecv(RECEIVE_PIN);
^
src/ac.h:9:21: error: expected ',' or '...' before numeric constant
#define RECEIVE_PIN 0
^
src/ac.h:14:26: note: in expansion of macro 'RECEIVE_PIN'
static IRrecv irrecv(RECEIVE_PIN);
^
*** [.pio\build\esp32cam\src\ac.cpp.o] Error 1
*** [.pio\build\esp32cam\src\main.cpp.o] Error 1
Я просто пытаюсь инициализировать ИК - приемник с помощью static IRrecv irrecv(RECEIVE_PIN);
, но компилятор отказывается связывать его вместе.
#ifndef _AC_H_
#define _AC_H_
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
#define RECEIVE_PIN 0
class IR
{
public:
static IRrecv irrecv(RECEIVE_PIN);
static decode_results results;
void initRecv();
bool waitForIR();
};
extern IR ir;
#endif
Если я делаю static IRrecv irrecv;
он успешно компилируется, но я не уверен, смогу ли я передать переменную pin после этого факта.
@Jeebus, 👍-1
Обсуждение1 ответ
Лучший ответ:
▲ 2
Статические элементы данных должны быть определены вне объявления класса. Инициализация происходит в точке, где определены члены:
файл ac.h:
//...
class IR
{
public:
// только статические элементы данных объявляются:
static IRrecv irrecv;
static decode_results results;
void initRecv();
bool waitForIR();
};
файл ac.cpp:
#include "ac.h"
#define RECEIVE_PIN 0
// Определения и инициализации статических элементов данных:
IRrecv IR::irrecv(RECEIVE_PIN);
decode_results IR::results;
,
@Edgar Bonet
Смотрите также:
- Как правильно работать с этим массивом?
- Непоследовательное поведение операторов включения?
- Библиотеки не связаны
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Ошибка: expected unqualified-id before 'if'
- Преобразование long в массив символов и обратно
- Ошибка компиляции кода для Arduino/Genuino Uno
https://stackoverflow.com/questions/5019856/initialize-static-variables-in-c-class, @Mat
что произойдет, если вы используете RCV_PIN? ... похоже, RECEIVE_PIN-это макрос, @jsotola
@Mat Кажется, что невозможно изменить значение после его инициализации, @Jeebus
@jsotola Я переписал его в разных форматах. Я перепробовал все виды типов данных, имен и инициализировал их как
irrecv(0)
., @Jeebus