误导性语法/解析器错误: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 向后兼容的工件(。

正因为如此,编译器不希望在uint8_t[]之后看到*,所以它说它期望reinterpret_cast的右括号。

你真的想要一个指向uint8_t数组的指针,而不仅仅是一个指向uint8_t的指针吗?

如果是这样,则写uint8_t(*)[].

但我认为你真正想要的很可能是指向uint8_t的指针,即 uint8_t * .

最新更新