在我的代码中,我有一个具有以下结构的类:
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/