нет соответствующей функции для вызова ‘WidgetBridge :: WidgetBridge ()’

Я посещал этот форум много-много раз, но это мой первый пост. Обычно я могу найти свой ответ здесь, и я думаю, что я, вероятно, нашел его на этот раз, но этот Мне не хватает времени, чтобы понять данные решения (изучал C ++ последние 2 недели).

Ошибка, которую я получаю:

нет соответствующей функции для вызова ‘WidgetBridge :: WidgetBridge ()’

извлечение моего (довольно длинного) кода:

class Room {
private:

//initializer list of internal objects
WidgetBridge bridge_thermostat;
WidgetBridge bridge_relay;

public:
//Constructor of the class:
Room() : bridge_thermostat(V100), bridge_relay(V107){}

void initBridges(String authThermostat, String authRelay){
bridge_thermostat.setAuthToken(authThermostat);
bridge_relay.setAuthToken(authRelay);
}

void receiveCurrentT(float param){
currentT = param;
Blynk.virtualWrite(V10, currentT);
timer.restartTimer(thermostatTimer );          //reset isDead timer for thermostat
Blynk.setProperty(V17, "color", BLYNK_GREEN);    //change LED color
Blynk.virtualWrite(V17, 200);
}
} livingRoom;

BLYNK_CONNECTED() {
Blynk.syncAll();
livingRoom.initBridges("xxx", "xxxx");  //auth of: thermostat, relay
}
BLYNK_WRITE(V10){ livingRoom.receiveCurrentT(param.asFloat());        } //receive currentT from thermostat

Судя по ответам, которые я нашел на этом форуме, WidgetBridge не имеет собственного конструктора при вызове. На основании полученных ответов я также попробовал:

public:
//Constructor of the class:
Room() : {
bridge_thermostat = V100;
bridge_relay = V107;
}

но это сделало ту же ошибку. Я продолжал читать о статических полях, конструкторах, пространствах имен и т. Д., Но суть: я застрял и не знаю, как это исправить.

Дополнительная информация: код для беспроводного модуля esp8266 arduino, который связывается с другими esp8266 (реле и термостат). Связь происходит через «мосты», которые создаются с использованием кода из Приложение Blynk.

Спасибо за ваше время!

ОБНОВЛЕНИЕ: я наконец нашел фактический мост виджета Calss. И из упомянутого решения я понял, что у него нет своего конструктора, но он есть .. так что теперь я действительно потерян. Вот часть класса виджета:

class WidgetBridge
: private BlynkWidgetBase
{
public:
WidgetBridge(uint8_t vPin)
: BlynkWidgetBase(vPin)
{}

void setAuthToken(const char* token) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add(mPin);
cmd.add("i");
cmd.add(token);
Blynk.sendCmd(BLYNK_CMD_BRIDGE, 0, cmd.getBuffer(), cmd.getLength()-1);
}
(....)
};

1

Решение

Из извлеченного вами кода (частично) и сообщения об ошибке (тоже частично …) единственный разумный ответ — это то, что класс WidgetBridge не имеет конструктора по умолчанию (т.е. конструктор с аргументом 0).

Возможно, потому что базовый класс BlynkWidgetBase также не имеет конструктора по умолчанию.

Таким образом, вы получаете ошибки компиляции в этих строках

  //initializer list of internal objects
WidgetBridge bridge_thermostat;
WidgetBridge bridge_relay;

Вы можете реализовать конструктор по умолчанию WidgetBride или создать эти две переменные с помощью конструктора, принимающего параметр uint8_t:

  //initializer list of internal objects
WidgetBridge bridge_thermostat(3);
WidgetBridge bridge_relay(4);

3 и 4 следует заменить на любое значение, которое имеет смысл, но только вы можете узнать это из извлечения кода

0

Другие решения

Других решений пока нет …