首页 > 解决方案 > 误导性语法/解析器错误: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()));
                                ^

我有一个'<'和一个匹配的'>',所以我不明白是什么导致了错误。这里可能是什么问题?

标签: c++

解决方案


假设您要尝试序列化数据,则应该强制转换为常规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


推荐阅读