编译器一直在抱怨case
中switch(){...}
类型的常量需求。但我 提供了 一个怪异的常数。 - 抱歉, / rant mode off
在我的课程中,我定义了type
以及TYPE_BULLISH
类型的TYPE_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:
我提供了一个常量,对吧?
答案 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
强>:
<强> Example code how to use it from one library project
强>: