must explicity的构造函数初始化没有默认构造函数的成员

时间:2017-01-05 19:13:26

标签: c++ cinder

我正在尝试修复此错误,我仍在学习cinder和c ++。 有人可以帮忙解决这个问题。提前谢谢

错误:    “'SerialHandler'的构造函数必须明确初始化没有默认构造函数的成员'serial'”

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;
       }
   }

}

1 个答案:

答案 0 :(得分:3)

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

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

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

create中的SerialHandler::setup()来电应该是这样的:

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