use*_*291 4 c++ qt initialization explicit return
我在openSUSE Leap 15上使用Qt 5.9.4上的GCC7.
我有以下课程:
class ManSuppProps : public QObject
{
Q_OBJECT
public:
explicit ManSuppProps(QString parentName);
explicit ManSuppProps(){}
explicit ManSuppProps(const ManSuppProps &manSuppProps);
explicit ManSuppProps(ManSuppProps &manSuppProps);
~ManSuppProps();
private:
QVector3D m_suppPos;
QString m_suppParentName;
}
Run Code Online (Sandbox Code Playgroud)
通过以下构造函数的实现:
ManSuppProps::ManSuppProps(QString parentName)
: QObject()
, m_suppPos(QVector3D(0, 0, 0))
, m_suppParentName(parentName)
{
qDebug()<<"Constructing ManSuppProps object ...";
}
ManSuppProps::ManSuppProps(const ManSuppProps &manSuppProps)
: QObject()
, m_suppPos(manSuppProps.getSuppPos())
, m_suppParentName(manSuppProps.getSuppParentName())
{
}
ManSuppProps::ManSuppProps(ManSuppProps &manSuppProps)
: QObject()
, m_suppPos(manSuppProps.getSuppPos())
, m_suppParentName(manSuppProps.getSuppParentName())
{
}
ManSuppProps::~ManSuppProps(){}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:没有匹配函数来调用'ManSuppProps :: ManSuppProps(ManSuppProps&)'
在具有类成员的另一个类的方法中ManSuppProps:
ManSuppProps EditorScene::manSuppProps()
{
return m_manSuppProps; // error is thrown here
}
Run Code Online (Sandbox Code Playgroud)
考虑到我有所有的构造函数,我不明白为什么会收到错误.任何人都可以帮忙.
这是预期的行为.请注意,相应的构造函数声明explicit为
explicit ManSuppProps(ManSuppProps &manSuppProps);
Run Code Online (Sandbox Code Playgroud)
并return m_manSuppProps;执行复制初始化,
4)从按值返回的函数返回时
并且复制初始化不考虑explicit构造函数.
(强调我的)
如果
T是一个类类型和类型的CV-不合格版本otherIST或从派生的类T,的非显式的构造T进行检查和最佳匹配是由过载分辨率来选择.然后调用构造函数来初始化对象.复制初始化比直接初始化更不容许:显式构造函数不转换构造函数,也不考虑复制初始化.