我有以下枚举: atttribute ((可见性("默认")))枚举MSG { 好, 失败, };
当我编译时,它给了我警告:
警告:'enum MSG'声明中忽略了属性 警告:'枚举MSG'的属性必须遵循'enum'关键字
当我在enum之后放置属性时,我得到以下错误:
警告:类型属性仅在类型定义时受到尊重 错误:在没有事先声明的情况下使用枚举'MSG' 错误:在'{'标记
之前的预期unqualified-id有谁能告诉我如何解决这个问题?
答案 0 :(得分:2)
visibility属性适用于 symbols ,如函数和变量。不包含变量名的枚举类型的定义不会创建任何符号。
没有变量的枚举类型:
enum msg { OK, FAIL };
枚举变量:
enum msg message;
枚举类型和变量:
enum msg { OK, FAIL } message;
在第一种情况下,可见性属性根本没有可能影响的符号。
答案 1 :(得分:0)
您可以通过声明枚举类型来解决此问题:
enum class MSG : std::uint32_t __atttribute__((visibility ("default") ))
{
OK,
FAIL,
};
尽管这似乎是GCC中的错误,该错误已在6+版本中修复。 Related SO post