我对C ++有点陌生,所以我需要一些帮助。我必须为一个活动预订一张票。
void Event::book(int row, int seat, Date date, char *name, char *note)
{
if(this->date==date && strcmp(this->name,name)==0)
{
if(hall.seatsInHall[row-1][seat-1].isFree()==true)
{
hall.seatsInHall[row-1][seat-1].isFree()=false; // here it gives me non-lvalue in assignment
hall.seatsInHall[row-1][seat-1].getNote()=note; // here it gives me non-lvalue in assignment
hall.seatsInHall[row-1][seat-1].getNote()=note; // here it gives me non-lvalue in assignment
cout<<"Seat Booked.";
}
else cout<<"This seat is already taken or bought.";
}
else cout<<"Error.";
}
该怎么办才能不显示此错误?
答案 0 :(得分:0)
出现问题是因为赋值语句左侧的内容不是左值,即您无法为它们赋值。最可能的原因是getNote()
和isFree()
正在按值返回。函数可以(并且仅当)返回引用时才能返回左值。
您需要确保isFree()
和getNote()
返回非常量引用。
对于您的帖子中遇到的两个函数,它们看起来像:
bool& isFree()
char*& getNote()
虽然这可以解决您的错误,但对于getNote来说,它不是很漂亮。此外,还不清楚哪个对象拥有char *数据的所有权,而这以后可能导致内存泄漏。更好的解决方案是将音符更改为std::string
,而不是char*
。
您的原始功能签名将如下所示:
void Event::book(int row, int seat, Date date, char *name, std::string note)
getNote()
的签名为:
std::string& getNote()