在 C++11 中需要右值作为一元'&'操作数

lvalue required as unary '&' operand in c++11

本文关键字:操作数 一元 C++11      更新时间:2023-10-16

我正在编码 c++11。 在 A 类中,我有一个成员变量"成员",定义为

vector<OtherClass> member; // A's member variable

我想将 A(所以我想将 OtherClass 中包含的所有数据类型都序列化为二进制格式的文件,所以我定义了一个函数,如下所示。

void A::write(ostream& os){ // A's function for outputting A
os.write(reinterpret_cast<const char*>( &(member.size()) ), sizeof(member.size()));
}

但编译器说右值需要作为一元"&"操作数。

如何在不创建临时对象(例如 long size=member.size() )的情况下修复它?

问题是&(member.size())- 你没有分配 size() 的返回值并尝试获取它的地址(它甚至可能没有地址)。

但是不知道为什么你在这里调用大小,无论如何你需要实际数据的起始地址:member.data()(或者如果你没有C++11&member[0])

"如何在不创建临时对象的情况下修复它">

你不能。您希望使用&,它获取对象的地址。没有对象,没有地址。就这么简单。

请注意,您的long size = member.size()想法不会创建临时变量。这是一个普通变量。