date==date&&strcmp(this->name,name)==0) { if(hall.seathinhall[row-1][seat-1].isFree()==true) { hall.seatinhall[row-1][seat-1].isFree()=false;//这里它给我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 cout,c++,class,project,codeblocks,C++,Class,Project,Codeblocks" /> date==date&&strcmp(this->name,name)==0) { if(hall.seathinhall[row-1][seat-1].isFree()==true) { hall.seatinhall[row-1][seat-1].isFree()=false;//这里它给我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 cout,c++,class,project,codeblocks,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."; } void事件::book(整数行、整数座、日期、字符*名称、字符*注释) { if(this->date==date&&strcmp(this->name,name)==0) { if(hall.seathinhall[row-1][seat-1].isFree()==true) { hall.seatinhall[row-1][seat-1].isFree()=false;//这里它给我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 cout

课堂作业中的非左值 我有点新的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."; } void事件::book(整数行、整数座、日期、字符*名称、字符*注释) { if(this->date==date&&strcmp(this->name,name)==0) { if(hall.seathinhall[row-1][seat-1].isFree()==true) { hall.seatinhall[row-1][seat-1].isFree()=false;//这里它给我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 hall.seatinhall[row-1][seat-1].getNote()=note;//这里它给了我赋值中的非左值 cout,c++,class,project,codeblocks,C++,Class,Project,Codeblocks,出现问题的原因是赋值语句左侧的内容不是左值,即不能给它们赋值。最可能的原因是getNote()和isFree()是按值返回的。如果(并且仅当)函数返回引用,则函数可以返回左值 您需要确保isFree()和getNote()返回非常量引用 对于您的帖子中出现问题的两个函数,它们可能如下所示: bool& isFree() char*& getNote() void Event::book(int row, int seat, Date date, char *name, std

出现问题的原因是赋值语句左侧的内容不是左值,即不能给它们赋值。最可能的原因是
getNote()
isFree()
是按值返回的。如果(并且仅当)函数返回引用,则函数可以返回左值

您需要确保
isFree()
getNote()
返回非常量引用

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

bool& isFree()

char*& getNote()
void Event::book(int row, int seat, Date date, char *name, std::string note)
虽然这可以修复您的错误,但在getNote的情况下,它不是很漂亮。此外,还不清楚哪个对象拥有char*数据的所有权,这可能会导致以后的内存泄漏。更好的解决方案是将note更改为
std::string
,而不是
char*

您的原始函数签名将如下所示:

bool& isFree()

char*& getNote()
void Event::book(int row, int seat, Date date, char *name, std::string note)
getNote()
的签名是:

std::string& getNote()

我猜你的意思是isFree=false,但是因为你没有给出定义,所以很难说。或者isFree(false),你必须给出isFreeisFree()的定义是类Seat中的bool函数,如果Seat是空闲的,则返回true如果按值返回
bool
,则会得到一个新对象,该对象是一个副本,其长度不足以更改值。由于这肯定是一个编程错误,编译器会将代码删除。有关术语的快速摘要,请参阅。显示de类的finiton,而您可以通过返回对指针的引用来修复它,即
char*&getNote()一个更好的、更健壮的C++选项是使用STD::字符串代替Car *。注释:String:String的特性和相对安全性使它更易于理解。是的,字符串更容易。谢谢!太好了!很高兴你能用它。如果这对你有帮助,你能接受我的AN吗?回答?