在我的代码中,我有一个具有以下结构的类:
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
答案 0 :(得分:3)
该错误与默认构造函数无关。 (是什么让你认为它做到了?)
问题很可能是由您的复制构造函数接受其参数为非const 引用引起的。 (由于您未提供有关nodes
的信息,因此无法确定。)如果nodes
是标准容器,则标准push_back
接受其参数作为const的引用。这样的参数不能传递给你的拷贝构造函数。因此错误。