我很确定我的代码在我输入到我的函数的参数方面是正确的但是在eclipse上我得到一个错误,没有匹配的构造函数。我想知道我是否需要在eclipse中更改设置(在Mac上使C ++工作到目前为止似乎非常繁琐)或者我的代码中是否存在错误。所以代码是一个链接的对象列表,我有一个节点类,然后包含在链表类中。
节点构造函数
Node::Node(Animal& a) : animal(a), next(0) {
}
然后我在链接列表中将其称为
void LinkedList::addAtIndex(const Animal& a, int index) {
Node *nodeToAdd = new Node(a);
上面的行给出了一个错误,没有用于初始化Node
的匹配构造函数答案 0 :(得分:0)
你的代码与constness不一致。
你可能想要
Node::Node(const Animal& a) : animal(a), next(0) {}
或
void LinkedList::addAtIndex(Animal& a, int index) {
Node *nodeToAdd = new Node(a);
// ..
}
因为const-reference不能绑定到非const-reference。
答案 1 :(得分:0)
在这种情况下:
void LinkedList::addAtIndex(const Animal& a, int index) {
Node *nodeToAdd = new Node(a);
a
预计会保持不变。你将它传递给你试图使用非常量引用的构造函数,因此违反了const contract / qualifier =>做不到。
要解决此问题:Node::Node(const Animal& a) : animal(a), next(0)
如果您的成员animal
不是Animal
的非const引用,这将起作用,否则您将不得不采取另一种方式:从addAtIndex
中移除const限定符方法
答案 2 :(得分:0)
我更改了节点的构造函数以获取const动物
Node::Node(const Animal& a) : animal(a), next(0)
一切正常