课堂作业中的非左值

时间:2020-06-12 23:20:13

标签: c++ class project codeblocks

我对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.";
}

该怎么办才能不显示此错误?

1 个答案:

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