C ++ 11统一初始化:字段初始化器不是常量

卢卡斯·巴特(Lukas Barth)

我正在尝试实例化一组这样的字符串:

class POI {
public:
...
  static const std::set<std::string> TYPES { "restaurant", "education", "financial", "health", "culture", "other" };
...
}

现在,当我这样做时,我得到这些错误(全部在此行):

error: field initializer is not constant
 static const std::set<std::string> TYPES { "restaurant", "education", "financial", "health", "culture", "other" };
error: in-class initialization of static data member 'const std::set<std::basic_string<char> > POI::TYPES' of non-literal type
error: non-constant in-class initialization invalid for static member 'POI::TYPES'                                                              
error: (an out of class initialization is required)
error: 'POI::TYPES' cannot be initialized by a non-constant expression when being declared

如果我假设集合中的字符串不被视为const,那对我来说是有道理的。这真的是问题吗?不幸的是,我找不到在初始化程序中将那些字符串声明为const的方法。这可能吗?

塞尔日·桑斯·斯特劳

您必须离线初始化静态变量,如下所示:

#include <set>
#include <string>

class POI {
public:
  static const std::set<std::string> TYPES;
};
const std::set<std::string> POI::TYPES { "restaurant", "education", "financial", "health", "culture", "other" };

这将适用于标准规定的整数/枚举类型(第9.4.2节:)

如果静态数据成员为const整数或const枚举类型,则其在类定义中的声明可以指定一个常量初始化器,该初始化器应为整数常量表达式。在这种情况下,成员可以出现在其范围内的整数常量表达式中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章