关于qt creator下报错cannot bind packed field ‘…’ to ‘…’
使用make_pair()创建pair时:
struct A{
uint8_t b;
uint32_t c;
}__attribute__((pack));
int main(){
A a1,a2;
make_pair(a1.c,a2.c);//报错
//cannot bind packed field 'a1.c' to 'unsigned int&'
return 0;
}
此时使用
make_pair((unsigned int)a1.c,(unsigned int)a2.c);
将类型强制转换一下就可以,因为按字节对齐的结构体的类型可能在传输过程中类型会变成一些很奇怪的,具体是什么我也不知道…
这个时候可能有的编译器会警告用的old style风格,可以使用static_cast<>()来转换就可以消除警告。
make_pair(static_cast<unsigned int>(a1.c),static_cast<unsigned int>(a2.c));
以此来记录一下今天调了这么久的一个bug。。。