Eclipse osx,没有匹配的构造函数

时间:2016-08-30 09:05:08

标签: c++ eclipse

我很确定我的代码在我输入到我的函数的参数方面是正确的但是在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

的匹配构造函数

3 个答案:

答案 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)

一切正常