好的,所以这是我的代码:
//================================================
// 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
错误。
为什么?如何解决这个问题?
答案 0 :(得分:1)
好的,所以这就是我想出来的......
如果常量声明为:
enum YAML_STRING = "...";
而不是const YAML_STRING = "...";
它工作正常。
P.S。虽然有点奇怪但它仍然让我感到震惊......
答案 1 :(得分:1)
来自dlang:
枚举声明用于定义一组常量。
或者,来自Çehreli tutorial:
枚举是一种能够定义命名常量值的功能。
而 const 是"类型限定符",表示无法修改的变量。