gpt4 book ai didi

C++11 统一初始化 : Field initializer is not constant

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:55 24 4
gpt4 key购买 nike

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

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 的方法。这可能吗?

最佳答案

您必须离线初始化您的静态变量,如:

#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 节:)所指定

If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression. In that case, the member can appear in integral constant expressions within its scope.

关于C++11 统一初始化 : Field initializer is not constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com