我在理解编译器错误时遇到了问题。
在名为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);
为什么会发生错误?有办法解决吗?
答案 0 :(得分:1)
您无法将临时绑定到非常量左值参考(Card& card
)。一种解决方案是将其作为 const lvalue reference 传递:
void add(Card const & card);