构造函数必须显式初始化没有默认构造函数的成员

Constructor for must explicity initialize the member which does not have a default constructor

我正在尝试修复此错误,我仍在学习 cinder 和 c++。 有人可以帮忙吗?提前谢谢你

错误: "Constructor for 'SerialHandler' must explicity initialize the member 'serial' which does not have a default constructor"

SerialHandler.h

class SerialHandler
{
public :
  SerialHandler(){}; // <- error here
  cinder::Serial serial; // <-
  void setup();
  bool isDone;
  bool isonline;
 };

SerialHandler.cpp

#include "SerialHandler.h"

void SerialHandler::setup()
{
   isDone =true;
   try {
      Serial::Device dev =    Serial::findDeviceByNameContains("cu.usbmodem1411");
      serial.Serial::create( dev, 115200);   
      console() << "Serial Connected" << std::endl;
      isonline =true;
   }
   catch( ... ) {
       console() << "There was an error initializing the serial device!" << std::endl;

       isonline =false;

       const vector<Serial::Device> &devices( Serial::getDevices() );
       for( vector<Serial::Device>::const_iterator deviceIt = devices.begin(); deviceIt != devices.end(); ++deviceIt ) {
       console() << "Device for MAIN?: " << deviceIt->getName() << endl;
       }
   }

}

这个问题没有从错误消息中假设的那么简单。 cinder::Serial 有一个受保护的构造函数,因此您甚至不能将 Serial 对象作为 class 的成员。 Serial::create 是一个静态成员函数,它 returns 一个 SerialRef 对象(它是指向 Serial 实例的共享指针)。

所以你的 class 声明应该是这样的:

class SerialHandler {
         ...
    cinder::SerialRef serial;
         ...
};

您在 SerialHandler::setup() 中的 create 调用应该如下所示:

serial = cinder::Serial::create( dev, 115200);