Switch() 案例:具有已定义的常量

Switch() Case: with an already defined constant

编译器一直抱怨 switch(){...} 中的 case 类型需要常量。但是我提供了一个该死的常量。 - 抱歉,/关闭咆哮模式

在我的 class 中,我定义了 type 加上 TYPE_BULLISHTYPE_BEARISH 类型的 int 常量。然后我赋值:

static const int TYPE_BULLISH = 0x001;
static const int TYPE_BEARISH = 0x002;

我为变量type分配了一个值:

type = TYPE_BULLISH;

然后在构造函数中

switch(type) {
    case TYPE_BULLISH: Print("Bullish"); break;
    case TYPE_BEARISH: Print("Bearish"); break;
    default:           Print("Doji");
}

输出错误:

'TYPE_BULLISH' - constant expression required

Q1: 知道这里发生了什么吗?

我的意思是,
Q2: 我提供了一个常量,对吧?

尝试使用 #define 代替(注意:否;在 #define 末尾):

#define TYPE_BULLISH    0x001
#define TYPE_BEARISH    0x002
int type = TYPE_BULLISH;

switch(type) {
    case TYPE_BULLISH: Print("Bullish"); break;
    case TYPE_BEARISH: Print("Bearish"); break;
    default:           Print("Doji");
}

A2: 不,您没有提供常量。

A1: 您的 MQL4 代码语法错误,无法编译。


虽然@JosephLee 提供了一个避免错误的替代品,但问题以某种方式隐藏起来,MQL4-代码保留了有效范围

您的 class 级名称在容器外不再存在,这些名称已在其中声明/初始化。

您的代码,在此类容器之外(通常是最内层的 { ... }-代码块/层次结构级别,发生此类声明的地方)根本无法编译,因为编译器遵守规则源代码解析期间的有效范围。

Q.E.D.

如果需要这种集中管理的预定义常量,可以使用 "globally"-可见变量。

请注意,#include#import#property library#export 会给这个马戏团带来更多破坏。

You were warned, at least...


A use of a utility-function:


Example code how to use it from one library project: