エラー、バグ、質問 - ページ 1172

 

MQL4の標準ライブラリ、特にインジケータクラスでエラーが発生します。

CiATR クラスでは、GetDataメソッドの本体が欠落しています。

ENUM_APPLIED_VOLUMEタイプのパラメータを使用するインジケータ(CiForceCiOBV)では、エラーが発生します:不適切な列挙子は使用できません。

ところで、ENUM_APPLIED_VOLUMEは標準の列挙型のようです。MQL4のドキュメントには存在しますが、実際には存在しません('ENUM_APPLIED_VOLUME' - undeclared identifier)。

ですから、ぜひすべての図書館をチェックしてみてください。機能確認もせず、急遽MT5から移植した感があります。

 

コンパイルエラー、ビルド966

#property library
#define  CLR     C'255,255,255'//White

class A {
        A() { clr = CLR; }
        color clr;
};
ビルド932は問題なし
 
A100:
直接置換した後、コードがコンパイルされないのは、コメント
 

コメントの内容による

#define  CLR     C'255,255,255'//не White

だいじょうぶ

 
まあ、いずれにせよコンパイルできないはずですが )
 

コメントは決して置き換えられることはなく、コンパイラは単に無視します。

#define  ONE 1 //один
#define  TWO 2 //два

int a = ONE + TWO;
приводит к int a = 1 + 2;
а не к int a = 1 //один + 2 //два;
いずれにせよ、https://www.mql5.com/ru/forum/1111/page1190#comment_993854 の // を /**/ に置き換えてください。
#define  CLR     C'255,255,255'/*White*/

結果は同じで、コンパイルエラーです。

 
これまで、他人の プロフィールページでは、リンクを介して(そのユーザーの)ニュースフィードに 切り替えることが可能でした。今はそのようなリンクはありませんが、URLの末尾に/newsをつけると、このページは普通に開くようになりました。UIからリンクが消えてしまったのはバグでしょうか?
 
marketeer:
次のような状況を説明してください。マルチカレンシーのインジケーターがあるのですが、その値はどのチャートに接続されているかによって変化しません。私はこのインジケーターにサポートラインとレジスタンスラインを手動で引いています。今度は、別のツールをマーケットの概要からウィンドウにドラッグすると、インジケータの外観はそのままで、線が消えるというトリックです。オブジェクト一覧]ダイアログボックスを開くと、それらのオブジェクトはまだそこに表示されています。エンドポイントの値(日付と値)は同じままです(つまり、同じ場所に表示されるはずです) - それは理解できます、それらは変更されていないのです。ただし、線は見えません。その後、元々あったツールをウィンドウ上にドラッグすると、線が再び表示されるようになります。何が問題なのか?

発見し、修正しました。

ご連絡ありがとうございます。一般的なバグであることが判明-以前は常にそのように動作していた

 

省略演算子 !() を適用できません -コンパイルエラー

class A {
public:
        bool operator !() { return ( false ); }
};

bool f1( A* a ) { return ( f3( a ) ); }
bool f2( A* a ) { return ( !a ); }             //ошибка компиляции
bool f3( A* a ) { return ( a.operator!() ); }  //нормально
bool f4( A& a ) { return ( !a ); }

void OnStart()
{
        A *a = new A;
        Print( f1( a ));
        Print( f4( a ));
}

もしコンパイラが、f4( a ) は 'a' がオブジェクトであり、数値としてのポインタ/スクリプタではないことを意味する、と理解している場合)

また、!a' は 'a' (オブジェクト、ポインタ/数値ではない) に対して同じことを意味することを理解する必要があります。

つまり、もし

class A {
    void f() {}

void OnStart()
{
        A a1;
        A *a2 = new A;
        a1.f();
        a2.f();
}
a1.f() と a2.f() は、a1, a2 がポインタであろうとオブジェクトであろうと、同じことを意味します。
 

例えば、operator+()ではコンパイルエラー は発生しませんし、上記の最初の例に全く使用されていないoperator+()を単純に追加してもエラーは発生しませんので、付け加えておきます。

class A {
public:
        bool operator !() { return ( false ); }
        bool operator +() { return ( false ); }
};
が、この場合、別の不確実性が発生する
class A {
public:
        bool operator !() { return ( true ); }
        bool operator +() { return ( true ); }
};

int g( A& a )  { return ( 10 ); }
int g( int )   { return ( 20 ); }

void OnStart()
{
        A *a = new A;
        Print( !a );            //здесь    считает                 'a' - числом ???
        Print( a.operator!() ); //здесь не считает (что правильно) 'a' - числом
        Print( g( a ) );        //здесь не считает (что правильно) 'a' - числом, хотя есть g( int ) и нет g( A* )
}