C++ 如何初始化静态常量集<;字符串>;在实现文件中?

C++ 如何初始化静态常量集<;字符串>;在实现文件中?,c++,static,set,constants,C++,Static,Set,Constants,我初始化的静态常量集似乎不正确,请您提供以下指导: obj.h: class obj { ... private: static const set<string> keywords; ... } 但这会产生错误: 错误:请求从“const string*{aka const std::basic_string*}”转换为非标量类型“const std::set” 谁能告诉我初始化这台电视机的正确方法吗?拿出=。只需调用构造函数 const set<strin

我初始化的
静态常量集
似乎不正确,请您提供以下指导:

obj.h

class obj
{
  ...

private:
  static const set<string> keywords;
  ...

}
但这会产生错误:
错误:请求从“const string*{aka const std::basic_string*}”转换为非标量类型“const std::set”


谁能告诉我初始化这台电视机的正确方法吗?

拿出
=
。只需调用构造函数

const set<string> obj::keywords (kw,kw + sizeof(kw)/sizeof(kw[0]));
const set obj::关键字(kw,kw+sizeof(kw)/sizeof(kw[0]);

您需要删除等号:

const set<string> obj::keywords(kw,kw + sizeof(kw)/sizeof(kw[0]));
const set obj::关键字(kw,kw+sizeof(kw)/sizeof(kw[0]);

现在发生的是可怕的逗号运算符。首先,它计算
kw
,并丢弃结果。接下来,它计算
kw+sizeof(kw)/sizeof(kw[0])
,并尝试用它复制initialize
关键字。

我想知道为什么要使用数组初始化
std::set

您可以直接将集合初始化为:

const set<string> obj::keywords {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};

希望能有所帮助。

我想知道为什么没有人从

static const set keywords=boost::assign::list_of(“GTR”)(“SQRT”)(“任何您需要的”);
这种方式可以减少键入,但语法怪异,因为每个项目都位于括号之间,并且没有逗号



如果您使用的是C++11,那么最好使用这种方式。我的回答只是展示了另一种可能的方法和(在我看来)旧标准的更好选择。

我非常同意。我假设它是C++03,但这对其他人来说仍然很有价值,即使OP使用的是C++03。另外,可能值得注意的是,在主要的三种类型中,只有MSVC没有合适的初始值设定项列表构造函数。非常感谢@paddy。
const set<string> obj::keywords {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};
const string kw[] = {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};
const set<string> obj::keywords(kw,kw + sizeof(kw)/sizeof(kw[0]));
static const set<string> keywords = boost::assign::list_of("GTR")("SQRT")("whatever you need");