在 C++11 中需要右值作为一元'&'操作数
lvalue required as unary '&' operand in c++11
我正在编码 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()
想法不会创建临时变量。这是一个普通变量。
相关文章:
- 控制允许动态运行c++的并发操作数
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++ 带有向量的 IF 计算操作数
- 是否所有C++运算符都接受操作数?
- 一元*运算符的操作数是否期望一个 prvalue
- 一元"运算符"未在C++中定义
- 与'operator='不匹配(操作数类型'String'且"void")
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 不正确的操作数类型 MSVC
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++:需要右值作为一元 '&' 操作数
- 在 C++11 中需要右值作为一元'&'操作数
- 尝试打印 a[1] 的地址时错误:弹出一元'&'操作数时需要左值
- 需要作为一元'&'操作数的错误左值
- 作为一元'&'操作数所需的目标C++值
- 错误:传递 std::string 时需要左值作为一元"&"操作数
- C++ 作为一元'&'操作数所需的右值