错误:没有匹配函数来调用...返回语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:没有匹配函数来调用...返回语句相关的知识,希望对你有一定的参考价值。

我在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;

}

通过以下构造函数的实现:

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(){}

我收到以下错误:

错误:没有匹配函数来调用'ManSuppProps :: ManSuppProps(ManSuppProps&)'

在具有类ManSuppProps成员的另一个类的方法中:

ManSuppProps EditorScene::manSuppProps()
{
    return m_manSuppProps; // error is thrown here
}

考虑到我有所有的构造函数,我不明白为什么会收到错误。任何人都可以帮忙。

答案

这是预期的行为。请注意,相应的构造函数声明为explicit as

explicit ManSuppProps(ManSuppProps &manSuppProps);

return m_manSuppProps;执行copy initialization

4)从按值返回的函数返回时

并且复制初始化不考虑explicit构造函数。

(强调我的)

如果T是类类型且other类型的cv非限定版本是T或从T派生的类,则检查T的非显式构造函数,并通过重载决策选择最佳匹配。然后调用构造函数来初始化对象。

复制初始化比直接初始化更不容许:显式构造函数不转换构造函数,也不考虑复制初始化。

以上是关于错误:没有匹配函数来调用...返回语句的主要内容,如果未能解决你的问题,请参考以下文章

php函数

17)PHP,函数基础和参数问题

php 函数

2018-1-25 函数方法

QT连接没有匹配的函数来调用

PHP eval() 函数