class 中的赋值非左值

Non-lvalue in assignment in class

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

我该怎么做才能不显示这个错误?

问题的出现是因为赋值语句左边的东西不是左值,即你不能给它们赋值。最可能的原因是 getNote()isFree() 是 returning-by-value。一个函数可以 return 左值当(且仅当)它 return 是一个引用。

您需要确保 isFree()getNote() return 非常量引用。

对于 post 中出现问题的两个函数,它们可能如下所示:

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