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

 
Zeleniy:
私はそれを理解した、私は1ヶ月以上インストールファイルを持っていた、今私は新しいものをダウンロードし、それは動作している、その後、正しいファイルをダウンロードしているので、私はインストールファイルが変更されているとは思いませんでした。
それどころか...以前のものはテーブルが表示されていなかったのに、なぜ表示されるようになったのか...。変だなあ
 
micle:
其れどころか旧作では、プレートを表示しなかったのに、なぜ表示するようになったのか......。変だなあ
よくわからないが、新しいものはタブレットもなくいつも通りの挙動で、インストールファイルのダウンロードを開始した。
 
Zeleniy:
よくわからないが、新しいものは何の兆候もなくいつも通りの振る舞いで、インストールファイルのダウンロードを開始した。
mystique...
 
Zeleniy:
よくわからないが、新しいものはタブもなくいつも通りの挙動で、インストールファイルのダウンロードを開始した。

インストール作業中にこのようなウィンドウが表示されるのは、コンピュータの保護機能(何らかの定期的なアップデートによるものらしい)とその後の特異な発現が関係している可能性があると遭遇したことがあります。

以前のものでも、ダウンロードしたばかりのインストールファイルでも構わない。

さて、今後のために、念のためメモしておきますが、この新しい依存は私にとっては(今は実験中ではありません)。

でも、悩みが解決してよかったです。

提案ですが、私の記憶では、最近MT5ターミナルのアップデートが あったように思います。この場合、プロキシプロンプト、インストールファイルの古いバージョン、オンラインインストールプロセスの間に何らかの関連があるのかもしれません。
 

2014.04.04 10:14のMT5 新ビルドの変更点一覧より「3.ターミナル:一部の条件でグラフィックオブジェクトがチャートに描画 されない 不具合を修正 しました。" 開発者がSD#966979 で私の要求を満たしたのか、それともこれが別の種類の修正なのか、あるいは次のビルドでの何らかの改善の副作用なのかは分かりませんが、いずれにせよ、私はもう大丈夫です。チェンジリストにはバグと 書かれていますが、SDとの やり取りでは「バグではなく、リソースを節約するための制限 です」とはっきり言われました。"

今まで通り、どのTFでも快適にTAビルドを見ることができるようになりました。

ありがとうございました。応募を締め切らせていただきます。

 

派生クラスでメソッドの定数 オーバーライドが可能(ビルド917)

class A {
public:
        virtual void f() const {}
        int x;
};
class B : public A {
public:
        virtual void f() /*не const*/ { x = 2; }
};
void g( const A* a ) { a.f(); }
void OnStart()
{
        A *a = new B();
        a.x = 1;
	Print( a.x ); //результат = 1
        g( a );
        Print( a.x ); //результат = 2, а обещали, что g( const A* ) не может менять объект
        delete( a );
}

別の例

class A {
public:
        virtual void f() const { Print( "1" ); }
};
class B : public A {
public:
        virtual void f()       { Print( "2" ); }
};
void g( const A* a ) { a.f(); }
void OnStart()
{
        A *a = new B();
        g( a );
        delete( a );
}

結果=2、ただしC++では結果=1

エラーは、派生クラスでは基底クラスと同じ名前のメソッドを宣言してはいけない(これは許される)という事実ではなく、C++が両者を異なるとみなすのに対し、MQLはB::f()がA::f()をオーバーライドするとみなすという点ですconst

 

Print()関数は、float信号の非数値を非信号として出力しますが、doubleはその両方を正常に出力するので、非論理的です。

Float は、1) 非信号番号から接頭辞 Q を除去し、信号番号と非信号番号を同じように印字するか、2) 信号番号に接頭辞 S を付けて出力するか、のいずれかでなければならない。もし、間違っていたら、Print()関数で出力される数値以外の信号で、プレフィックスQがない例を教えてください。

例えば、シグナルダブルの非数値を受け取り、floatに変換して、Print()で両方出力する。最初のケースではSNAN、2番目のケースではQNANが表示されます。

 

テスターからファイルにデータを書き込む方法をつつく過程で、こんなエラーが発生しました(収まりきらないので短縮しています)。

2014.04.08 01:47:30.531 2013.07.01 02:10:00   00: 0x000000013FD1F038
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F04D 498 BCD            mov        rcx, r13
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F04A 41 B001            mov        r8b, 0x1
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F043 80 BD3804000000    cmp        byte [rbp+0x438], 0x0
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F040 83 C202            add        edx, 0x2
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F03D 418 BD4            mov        edx, r12d
2014.04.08 01:47:30.531 2013.07.01 02:10:00   
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F03B EB03              jmp        0x13fd1f040
2014.04.08 01:47:30.531 2013.07.01 02:10:00      crash -->  000000013 FD1F038 8 B50FC            mov        edx, [rax-0x4]
2014.04.08 01:47:30.531 2013.07.01 02:10:00   
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1F033 4885 C0            test       rax, rax
[cut]
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1EE6E 55                push       rbp
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1EE67 4 C894018          mov        [rax+0x18], r8
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1EE63 48895808          mov        [rax+0x8], rbx
2014.04.08 01:47:30.531 2013.07.01 02:10:00                 000000013 FD1EE60 488 BC4            mov        rax, rsp
2014.04.08 01:47:30.531 2013.07.01 02:10:00   Access violation at 0x000000013FD1F038 read to 0x00000003FFFFFFFF

つまり、もちろん、このミスは私の不器用さからくる当然の結果であることは理解しています。そして、いずれにせよ、それはすぐに修正されました(問題は、必要であれば、第3の関数を介してFileWriteに 非文字列データを渡そうとしたことでした - 私はより詳細にそれを記述することができます)。しかし、このエラーはあまり明確ではなく、ちょっと怖い感じです :) また、コンパイラはそれが期待されるものであることをどこにも示唆していません。せめてワープとか追加した方がいいのでは...。

 
Lone_Irbis:

テスターからファイルにデータを書き込む方法をつつく過程で、こんなエラーが発生しました(収まりきらないので短縮しています)。

つまり、もちろん、このミスは私の不器用さからくる当然の結果であることは理解しています。そして、いずれにせよ、それはすぐに修正されました(問題は、必要であれば、第3の関数を介してFileWriteに非文字列データを渡そうとしたことでした- 私はより詳細にそれを記述することができます)。しかし、このエラーはあまり明確ではなく、ちょっと怖い感じです :) また、コンパイラはそれが期待されるものであることをどこにも示唆していません。せめてワープとか追加した方がいいのでは...。

はい、具体的にお書きください。

ビルド、OS、ビットレート、テスターの設定 に興味がある。再生用コードを添付してください。

ありがとうございます。

 

OK、やってみます。適当にロールバックして再現できたのですが、バグの切り分けができず、別に再現できないんです...。

Build: MetaTester 5 x64 build 910 (07 Mar 2014)https://dl.dropboxusercontent.com/u/61587787/bugreport/build.png

Win7 x64 デスクトップhttps://dl.dropboxusercontent.com/u/61587787/bugreport/system.png

テスターウィンドウからコピーしたもの: https://dl.dropboxusercontent.com/u/61587787/bugreport/log.txt

screenshots from the tester (well, you never know):https://dl.dropboxusercontent.com/u/61587787/bugreport/tester1.pnghttps://dl.dropboxusercontent.com/u/61587787/bugreport/tester2.png

tester settings(I don't know what I mean):https://dl.dropboxusercontent.com/u/61587787/bugreport/config.png

コードスニペット

   int idx = 133;
   WriteCSV("test.csv",idx);
   
class Core { 
public:  
   void     WriteCSV(string FileName, string s1, string s2, string s3, string s4, string s5, string s6);
};

void Core::WriteCSV(string FileName, string s1, string s2="", string s3="", string s4="", string s5="", string s6=""){
   int handle = FileOpen(FileName,FILE_CSV|FILE_WRITE|FILE_SHARE_WRITE|FILE_UNICODE|FILE_COMMON,"~");
   if(handle == INVALID_HANDLE) Print("error");
   else FileWrite(handle,s1,s2,s3,s4,s5,s6);
   FileClose(handle);
}

WriteCSV("test.csv",(string)idx); に置き換えると、エラーは 解消されます。その他の文字列以外の変数は、ここでは何もしません。しかし、idxが何に相当するかは関係ないようです(配列内のニュースの通し番号に過ぎません)。結果を保存しようとすると、どのニュースでも再生される。警告の うち、「数値」から「文字列」への暗黙の変換のみが出力されますが、やはりこの場合のみクラッシュと なります。

私はここに完全なコードとそれへの.setを投稿したくないのですが、どこかに送るかもしれません。