"案例必须是字符串或整数常量"错误?

时间:2014-05-03 09:34:06

标签: switch-statement const d dmd

好的,所以这是我的代码:

//================================================
// Constants
//================================================

const string YAML_STRING    =   "tag:yaml.org,2002:str";
const string YAML_INT       =   "tag:yaml.org,2002:int";
const string YAML_FLOAT     =   "tag:yaml.org,2002:float";
const string YAML_BOOL      =   "tag:yaml.org,2002:bool";

const string YAML_SEQ       =   "tag:yaml.org,2002:seq";
const string YAML_SET       =   "tag:yaml.org,2002:set";

const string YAML_MAP       =   "tag:yaml.org,2002:map";
const string YAML_OMAP      =   "tag:yaml.org,2002:omap";
const string YAML_PAIRS     =   "tag:yaml.org,2002:pairs";

//================================================
// Functions
//================================================

Value parseYAMLNode(Node n)
{
    writeln(n.tag);

    switch (n.tag)
    {
        case YAML_STRING    :   return new Value(n.as!(string));
        case YAML_INT       :   return new Value(n.as!(long));
        case YAML_FLOAT     :   return new Value(n.as!(float));
        case YAML_BOOL      :   return new Value(n.as!(bool));
        default             :
        }

        // more code - omitted
}

一旦我决定将我的案例字符串声明为consts(它们被重用,所以我认为它是实用的),它会触发Case must be a string or an integral constant错误。

为什么?如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

好的,所以这就是我想出来的......

如果常量声明为:

enum YAML_STRING = "...";

而不是const YAML_STRING = "...";

它工作正常。


P.S。虽然有点奇怪但它仍然让我感到震惊......

答案 1 :(得分:1)

来自dlang

  

枚举声明用于定义一组常量。

或者,来自Çehreli tutorial

  

枚举是一种能够定义命名常量值的功能。

const 是"类型限定符",表示无法修改的变量。