1

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

在我的课堂上,我已经定义了类型的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:我提供了一个常数,对吧?

4

2 回答 2

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");
}
于 2016-04-11T20:31:06.010 回答
1

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

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


虽然@JosephLee 提供了一个避免错误的替代品,但问题在某种程度上是隐藏的,MQL4-code 保留了一个有效范围

您的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

在此处输入图像描述

于 2016-04-12T14:35:28.050 回答