我正在编写这个东西,让static const set<char>
包含一些不会改变的元素会很有帮助。
class MyClass {
private:
static const set<char> mySet = ??
}
我该怎么做?如果你可以从一个字符串创建它们会很好,比如mySet("ABC")
,但我无法使语法工作。
答案 0 :(得分:8)
像这样的东西可以正常工作:
// my_class.h
class MyClass
{
static const std::set<char> mySet;
};
// my_class.cpp
const char *tmp = "ABCDEFGHI";
const std::set<char> MyClass::mySet(tmp,tmp+strlen(tmp));
答案 1 :(得分:1)
您无法在类中初始化变量,因为它在技术上尚未定义(仅声明)。
在课堂上,请保留static const set<char> mySet;
。
在实现中(即.cpp文件):
const char[] _MyClassSetChars = "ABC";
// Define and initialize the set, using
// the constructor that takes a start and end iterator
const set<char> MyClass::mySet(
_MyClassSetChars,
_MyClassSetChars + sizeof(_MyClassSetChars) / sizeof(_MyClassSetChars[0])
);
这还包括集合中的终止空字符(\0
),这可能不是你想要的 - 而是使用它:
const set<char> MyClass::mySet(
_MyClassSetChars,
_MyClassSetChars + (sizeof(_MyClassSetChars) / sizeof(_MyClassSetChars[0]) - 1)
);
请注意,在这里您可以使用<cstring>
的{{1}}(根据Let_Me_Be's answer)代替上面更一般的表单:
strlen()
答案 2 :(得分:1)
以下情况应该起作用..
#include <iostream>
#include <set>
struct foo
{
static std::set<char> init_chars();
static const std::set<char> myChars;
};
const std::set<char> foo::myChars = foo::init_chars();
std::set<char> foo::init_chars()
{
std::string sl("ABDCEDFG");
return std::set<char>(sl.begin(), sl.end());
}
int main()
{
std::cout << foo::myChars.size() << std::endl;
return 0;
}
答案 3 :(得分:0)
你试过static set <const char> mySet;
吗?当然,您需要先将其初始化,否则如果在声明insert
后尝试set
,则会失败。
答案 4 :(得分:0)
header file:
#include<set>
class MyClass {
private:
static const std::set<char> mySet;
}
source file:
#include<boost/assign.hpp>
const MyClass::mySet = boost::assign::list_of('A')('B')('C');