c++ - 误导性语法/解析器错误:reinterpret_cast 中预期 > 而不是 *
问题描述
尝试重新解释转换指针时出现奇怪的语法错误:
void my_function(std::unique_ptr<float[]> ptr) {
// Some stuff
... = reinterpret_cast<uint8_t[]*>(ptr.release());
// Some other stuff
}
我收到以下错误消息:
error: expected '>'
reinterpret_cast<uint8_t[] *>(ptr.release()));
^
我有一个'<'和一个匹配的'>',所以我不明白是什么导致了错误。这里可能是什么问题?
解决方案
假设您要尝试序列化数据,则应该强制转换为常规uint8_t
指针。为此,只需执行以下操作:
reinterpret_cast<uint8_t*>(ptr.release());
请注意,ptr.release()
释放 拥有的指针的所有权unique_ptr
,并且删除指向数组的float
指针作为指向数组的指针uint8_t
是未定义的行为。始终将指针删除为原始类型,而不进行强制转换。
我建议ptr.get()
改用,因为这不会转移所有权:
reinterpret_cast<uint8_t*>(ptr.get());
为什么会出现错误:指向数组的指针的语法是uint8_t(*)[]
. 这……很奇怪,直到另一位评论者指出,我不知道它的存在(它是与 C 向后兼容的产物)。
正因为如此,编译器不希望看到*
after uint8_t[]
,所以它说它需要 . 的右括号reinterpret_cast
。
推荐阅读
- ios - 广告未展示,但测试广告正确展示,也提出了请求,但没有展示
- android - ViewModel 作为片段构造函数的参数
- python - uWSGI 编码错误“ascii”编解码器无法在位置 7 编码字符“\xe9”:序数不在范围内(128)
- c - 在 C 中使用指针反转字符串(必须使用无符号 *char)
- c# - 当我的 Xamarin Android 应用程序停止时,如何接收推送通知?
- vba - 如何使用 VBA 显示总计行?
- node.js - 避免在多个文件中多次要求相同的东西
- regex - 查找两个开始和结束参数之间的文本匹配
- amazon-dynamodb - 为什么 DynamoDB 为属性名称添加 NULL 后缀?
- powershell - 如何使用 PowerShell 通过串行端口向监视器发送十六进制命令