1

caseコンパイラは、 a の型の定数の必要性について泣き言を言い続けswitch(){...}ます。しかし、私はおかしな定数を提供しました。- すみません、/暴言モードをオフにします

私のクラスでは、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:、定数を提供しましたよね?

4

2 に答える 2

2

代わりに使用してみてください#define(注: No ; の最後に#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保持しています。

あなたのclass-level 指定は、これらが宣言/初期化されたコンテナーの外に存在しなくなります。

そのようなコンテナーの外側のコード (通常、その{ ... }ような宣言が行われた最も内側の周囲のコードブロック/階層レベル) は、コンパイラーがソース中の有効範囲の規則に従うため、コンパイルできません。コードの解析。

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 に答える