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

时间:2016-04-11 19:14:34

标签: mql4 mql5

编译器一直在抱怨caseswitch(){...}类型的常量需求。但我 提供了 一个怪异的常数。 - 抱歉, / rant mode off

在我的课程中,我定义了type以及TYPE_BULLISH类型的TYPE_BEARISHint常量。然后我分配了值:

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: 我提供了一个常量,对吧?

2 个答案:

答案 0 :(得分:2)

尝试使用#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");
}

答案 1 :(得分:1)

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

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

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

您的class级别名称不再存在于容器外部,而且已经声明/初始化了这些名称。

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

Q.E.D.

如果需要这种集中管理的预定义常量,可以使用“全局”可见变量。

请注意,#include#import#property library#export会对此马戏团造成更大的破坏。

  

你被警告了,至少......

<强> A use of a utility-function

enter image description here

<强> Example code how to use it from one library project

enter image description here