【问题标题】:No matching constructor while trying to call default constructor尝试调用默认构造函数时没有匹配的构造函数
【发布时间】:2016-12-20 00:04:51
【问题描述】:

在我的代码中,我有一个具有以下结构的类:

 struct AutomatonNode {
    ...
    AutomatonNode();
    AutomatonNode(AutomatonNode &node);
    ...
};

默认构造函数有以下实现:

AutomatonNode::AutomatonNode() :
    suffixLink(-1),
    len(0) {};

但是,在编译过程中出现以下错误:

'SA::AutomatonNode'的初始化没有匹配的构造函数

在这个方法中:

size_t SuffixAutomaton::newState() {
    AutomatonNode node;
    nodes.push_back(node);
    return nodes.size() - 1;
}

对我来说看起来非常奇怪,因为一切都到位并且构造函数是公共的(它是一个结构,默认情况下所有字段都是公共的)。有什么想法吗?

清关:

Apple LLVM 版本 7.3.0 (clang-703.0.31)

目标:x86_64-apple-darwin15.3.0

线程模型:posix

【问题讨论】:

  • 如果复制构造函数采用 const ref 是否有效?

标签: c++ class oop object constructor


【解决方案1】:

该错误与默认构造函数无关。 (是什么让你认为它做到了?)

问题很可能是由于您的复制构造函数接受其参数作为 non-const 引用引起的。 (不可能肯定地说,因为您没有提供有关nodes 是什么的信息。)如果nodes 是标准容器,则标准push_back 接受其参数作为对const 的引用。此类参数不能传递给您的复制构造函数。因此出现错误。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2014-10-11
    • 2019-06-08
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2022-01-15
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多