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

 

A100:

virtual int Compare(const CObject *node,const int mode=0) const;


おっしゃるとおりです。無駄な言葉を使わず、短く、わかりやすく。動作するコードを掲載しました。

ファイル:
sort.mq5  3 kb
 
Stanislav Korotky:

その結果、このメソッド内部ではtypenameはintなど、渡された型を正しく定義しますが、Bのコンストラクタ内部ではtypenameは既にstringと等しくなっています。

typenameの結果は常に文字列型 であり,言い換えればtypenameは関数として慣習的に表現することができる
string typename( X );
 
A100:
typenameの結果は常に文字列型 である,つまり
typenameは型名が入った文字列を返します。テンプレート化されたクラスメソッドの内部では、型が "int "であり、そこから呼び出されたコンストラクタの内部では、"string "を含む文字列が指定されています。
 
Stanislav Korotky:
typenameは型名を表す文字列を返します。テンプレート化されたクラスメソッドの内部では、型が "int "の文字列が、そこから呼び出されたコンストラクタの内部では、"string "の文字列が含まれています。
class A { public:
template<typename T>
        A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
        void f( T t ) { A a( t ); } //вызываем A::A(...)
};
void OnStart()
{
        B b;
        int i = 0;
        b.f( i );
}
結果:int
 

コンパイラは、#endif が欠落していてもエラーを報告しない

#property library
#ifndef  MACRO
#define  MACRO

好ましくは、そうでなければ、見つけにくいエラー
 
A100:
結果:int。
そう、この最小限の例では当然のように動作しますが、より複雑なソースコードではそうはいきません。SDで書きました。
 
CoderMQ4:

みんな、これはマーケットのバグなのか、それとも完全に正常なのか?


試していませんが、OSではなくハードウェアに紐付いているのであれば、動作しないはずです。ハードディスクを外して、ビデオの違うマザーボードに載せるようなものです。すぐにでも新しいドライバーの募集を開始します。

それとも、私が仮想マシンを 誤解しているのでしょうか?

 

派生クラスのインスタンスで仮想関数を 呼び出すと、派生クラスではなくベースクラスからその関数が呼び出されることになります。

 
Ilya Malev:

派生クラスのインスタンスで仮想関数を 呼び出すと、派生クラスではなくベースクラスからその関数が呼び出されることになります。

これは、コンストラクタでは常にそうです。なぜ?-> google C++ (クエリ文字列に単語コンストラクタを追加)
 
A100:
コンストラクタでは常にそうなっています。なぜ?-> google C++ (クエリ文字列に単語コンストラクタを追加)

ありがとうございます、知りませんでした)MQL5 Referenceに追加すると良いですね、ほら、仮想関数や コンストラクタが記載されているところです。すべての言語でそうなっているわけではありません。