没有匹配函数来调用' WidgetBridge :: WidgetBridge()'

时间:2018-04-09 08:58:08

标签: c++ class constructor blynk

我已经多次访问过这个论坛了,但这是我在这里发表的第一篇文章。通常我可以在这里找到我的答案,我想我这次可能已经找到了答案,但这个时间我的知识缺乏理解给出的解决方案(过去2周一直在学习C ++) 。

我得到的错误:

  

没有匹配功能来调用' 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 wifi模块,该模块与其他esp8266(继电器和恒温器)通信。沟通通过“桥梁”进行。这是使用Blynk app中的代码创建的。

感谢您的时间!

更新:我终于找到了实际的calss widgetbridge本身。从上面提到的解决方案中我收集到它本身没有构造函数,但确实如此......现在我真的迷失了。这是widget类的一部分:

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 个答案:

答案 0 :(得分:0)

从您发布的代码提取(部分)和错误消息(部分也是......),唯一合理的答案是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将被任何有意义的值替换,但只有你可以从代码提取中知道