1

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

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

SerialHandler.h

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

串行处理器.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;
       }
   }

}
4

1 回答 1

3

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

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

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

您的create来电SerialHandler::setup()应如下所示:

serial = cinder::Serial::create( dev, 115200);  
于 2017-01-05T19:38:00.310 回答