你能否将临时对象传递给通过引用获取变量的函数?

时间:2016-10-29 18:21:24

标签: c++

我在理解编译器错误时遇到了问题。

在名为add()的对象上调用的成员函数rolo通过引用获取Card变量:

class Card{
public:
    Card(string first,string last,string occupation,string address,string phoneNum);
};

class Rolodex{
public:
    void add(Card& card);
};

int main()
{
    Rolodex rolo;
    rolo.add(Card("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999"));
}

编译器在这一行上给出了一个错误:

rolo.add(Card("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999"));
  

对'Card'类型的非const左值引用不能绑定到'Card'类型的临时值。

我认为用临时对象作为参数调用该方法是不合法的。 我认为如果做以下事情会更好:

Card variable("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999");
rolo.add(variable);

为什么会发生错误?有办法解决吗?

1 个答案:

答案 0 :(得分:1)

您无法将临时绑定到非常量左值参考Card& card)。一种解决方案是将其作为 const lvalue reference 传递:

void add(Card const & card);