我正在尝试创建一个枚举,但出现“标识符预期错误”

时间:2020-05-12 23:34:03

标签: c++ enums mql4 mql5

我有此代码:

string stringToCheck = "text1";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
    if (stringToCheck.Contains(x) == false)
    {
        // Process...
    }
}

所以基本上我想创建的是程序看到字符串“ buy”时,必须将其读取为OP_BUY。由于OP_BUY是MQL4上的内部命令,我该怎么做?还有另一种方法吗?

2 个答案:

答案 0 :(得分:4)

enum EXECUTION_COMMANDS
{
    buy = OP_BUY,
    ...
};

现在标识符buy基本上是一个命名的整数常量,其值与OP_BUY相同。您可以将buyOP_BUY彼此用作别名。


如果您真的想使用 strings ,则需要创建一个映射,将字符串映射为它们的整数值:

std::unordered_map<std::string, int> command_map = {
    { "buy", OP_BUY },
    ...
};

然后使用command_map["buy"]来使用它,它将返回int的{​​{1}}值。

答案 1 :(得分:1)

只要去掉引号即可。

枚举器的名称应该是标识符,而不是字符串。

enum EXECUTION_COMMANDS
{
   buy       = OP_BUY,
   sell      = OP_SELL,
   buyLimit  = OP_BUYLIMIT,
   sellLimit = OP_SELLLIMIT,
   buyStop   = OP_BUYSTOP,
   sellStop  = OP_SELLSTOP
};

但是,如果您希望用它替换源代码中的实际字符串文字,您将感到失望。要么不使用字符串文字,要么,如果您不能将输入更改为字符串,则使用std::map<std::string, int>引入一些映射。