我正在尝试使用一些 C++ ARM 编译器编译以下代码。
void pairs_converter(const mem_t& mem, uint16_t* data) {/* some stuff */}
template <typename StringT>
inline
void to_string(const mem_t& mem, StringT& s)
{
s.resize(24);
pairs_converter(mem, reinterpret_cast<uint16_t*>(&s[0]));
}
我收到以下错误代码:
error: cast from '__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type*' {aka 'char*'} to 'uint16_t*' {aka 'short unsigned int*'} increases required alignment of target type [-Werror=cast-align]
pairs_converter(mem, reinterpret_cast<uint16_t*>(&s[0]));
根据我的理解,它看起来像是一些单词和八位字节之间的对齐问题,但我对 C++ 的掌握不够流畅,无法理解如何解决这个编译器错误。
我将不胜感激有关此 C++ 错误的一些更详细的解释!
我的一般建议是不要使用reinterpret_cast,除非你确切地知道自己在做什么。如果你真的需要它,你应该在文档中真正熟悉它。