在C ++中创建一个<char> </char>

时间:2011-04-04 20:12:51

标签: c++ initialization

我正在编写这个东西,让static const set<char>包含一些不会改变的元素会很有帮助。

class MyClass {
     private:
         static const set<char> mySet = ??  
}

我该怎么做?如果你可以从一个字符串创建它们会很好,比如mySet("ABC"),但我无法使语法工作。

5 个答案:

答案 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()

另见this question

答案 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');