出错如下:
/home/xxx/boost_1_67_0/boost/uuid/uuid_io.hpp:100:32: error: expected unqualified-id before ‘=’ token
unsigned char byte = static_cast<unsigned char>(std::distance(&xdigits[0], f));
^
/home/xxx/boost_1_67_0/boost/uuid/uuid_io.hpp:110:18: error: expected unqualified-id before ‘<<=’ token
byte <<= 4;
^~~
/home/xxx/boost_1_67_0/boost/uuid/uuid_io.hpp:111:18: error: expected unqualified-id before ‘|=’ token
byte |= static_cast<unsigned char>(std::distance(&xdigits[0], f));
原因是前面有个头文件里:
#define byte char
byte已经被替换成char了,所以出错了。
这个修改也简单,把这个头文件提到有宏定义的头文件前面去就可以了。
所以尽量不用#define,会出奇怪问题,错误还不容易看出来。
不过boost用byte做变量名也太不妥了,用byte做type定义的很常见啊,太容易出问题了。
这个提示unqualified-id,我也服了,一般翻译都不知道他啥意思,看了qualified,有个意思是有保留,关键字又叫保留字,我猜他意思是希望有个不是关键字的id。

本文解析了在使用Boost库的uuid_io组件时遇到的编译错误,错误源于宏定义冲突导致的类型混淆。文章详细解释了解决方案,即调整包含文件的顺序,并建议避免使用易引发冲突的宏定义。

1万+

被折叠的 条评论
为什么被折叠?



