构造函数必须显式初始化没有默认构造函数的成员
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);
我正在尝试修复此错误,我仍在学习 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);