c++ - 尝试调用默认构造函数时没有匹配的构造函数

标签 c++ class oop object constructor

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

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

默认构造函数实现如下:

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

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

No matching constructor for initialization of 'SA::AutomatonNode'

在这个方法中:

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

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

清除:

Apple LLVM 版本 7.3.0 (clang-703.0.31)

目标:x86_64-apple-darwin15.3.0

线程模型:posix

最佳答案

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

问题很可能是由于您的复制构造函数将其参数作为非常量 引用接受。 (无法确定,因为您没有提供关于什么是 nodes 的信息。)如果 nodes 是标准容器,那么标准 push_back接受它的参数作为对 const 的引用。这样的参数不能传递给你的复制构造函数。因此错误。

关于c++ - 尝试调用默认构造函数时没有匹配的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232950/

相关文章:

c++ - checkin 构造函数与设置函数

c++ - 关于 C++ 中的二维数组初始化

javascript - 如何使用 OOP 来避免一遍又一遍地重复相同的代码?

python - __init__() 缺少 3 个必需的位置参数

python - 实例化具有任意数量属性的类

javascript - 从第一个对象创建的另一个对象中访问对象原型(prototype)的变量

architecture - 面向对象 : Can an interface implement another interface?

c++ - AVR G++ : Executing a function that is past the 128 Kb ROM boundary

c++ - 将包与 Rcpp 链接时出现 dyn.load 错误

C++:让自定义类像容器类和普通类一样工作?