エラー、バグ、質問 - ページ 2362 1...235523562357235823592360236123622363236423652366236723682369...3185 新しいコメント Igor Makanu 2018.12.27 20:27 #23611 Ilya Malev:リストの基底クラスとしてCNode(Prev()、Next()などのメソッドを持つ)を用意し、その子孫であるCOrderのフィールドをループで呼び出しています。ループは、その子孫であるCOrderのフィールドを呼び出します。ループはdefinesで1回だけ宣言され、あとはいたるところで使われる。あなたの例に従おうとしましたが、typedefを使いたいのです。 #property strict #include <Object.mqh> #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CMyclass:public CObject { public: int x; double y; void CMyclass(void):x(-1),y(-2.2) { } }; typedef CMyclass (*PtrCMyclass)(CObject*); PtrCMyclass Myclass; //+------------------------------------------------------------------+ void OnStart() { CList *base=new CList; for(int i=0;i<3;i++) { base.Add(new CMyclass); Myclass(base.GetCurrentNode()).x = 99; Myclass(base.GetCurrentNode()).y = -555.5; } for(int i=0;i<3;i++) { Print(Myclass(base.GetNodeAtIndex(i)).x," : ",Myclass(base.GetNodeAtIndex(i)).y); } delete base; } //+------------------------------------------------------------------+ 今、コンパイラは私の例をスキップしますが、私は...何かが必要です...しかし、何? 実行時にエラーが発生します。 tst_file.mq4' 内の無効な関数 ポインタ呼び出し (30,7) Ilya Malev 2018.12.27 20:30 #23612 Igor Makanu:あなたの言う通り、あなたの例を試してみましたが、私はtypedefを使いたいのです。 今、コンパイラは私の例をスキップしていますが、私は・・・何か必要です・・・でも何? tst_file.mq4' 内の無効な関数 ポインタ呼び出し (30,7) なので、関数を書いて、ポインタに代入する必要があります))) typedef CMyclass* (*PtrCMyclass)(CObject*); CMyclass* FMyCast1(CObject*p){ CMyclass *r = dynamic_cast<CMyclass*>(p); if(CheckPointer( r ) != POINTER_INVALID) return r; else return NULL; } PtrCMyclass Myclass = FMyCast1; Igor Makanu 2018.12.27 20:35 #23613 Ilya Malev:そのため、関数を書いてポインタに代入する必要があります)))ふむ、なるほどと思いつつ、では、次のように関数を書くと、クラスフィールドに対応するポイントがないのです。 PtrCMyclass Myclass(CObject* obj){ return(GetPointer(obj)); }.PtrCMyclass Myclass(CObject* obj) { return(GetPointer(obj)); }; 'x' - struct or class type expected tst_file.mq4 30 38 Ilya Malev 2018.12.27 20:36 #23614 上に書いたように試してみてください。しかし,typedefはコードと関数呼び出しの 間に不必要な「詰め物」をすることになるので,ここでは本当に必要ない。同じポインターを使用する他のクラスでこの呼び出しをオーバーロードすることはまだできません。クラスごとに新しく作る必要があります。そろそろ型定義は全く役に立たないということを理解してもいい頃だと思うのですが、いかがでしょう :) TheXpert 2018.12.27 20:59 #23615 Igor Makanu:((CMyclass*)base.GetNodeAtIndex(i)).x Igor Makanu 2018.12.27 21:10 #23616 Ilya Malev: 上に書いたように試してみてください。typedefはコードと関数呼び出しの 間の余分な「スペーサー」であるため、ここでは必要ないのだが。それでも、同じポインタを使った別のクラスで、この呼び出しをオーバーロードすることはできません。クラスごとに新しく作る必要があります。そろそろ型定義は全く役に立たないということを理解してもいい頃だと思うのですが、いかがでしょう :)私はそれを試してみましたが、私はまだdefansで動作する方法がわからない、科学は複雑です、私はエラーが発生しました: tst_file EURUSD,H1: 'tst_file.mq4' で無効なポインタアクセス(31,56)。 #property strict #include <Object.mqh> #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CMyclass:public CObject { public: int x; double y; void CMyclass(void):x(-1),y(-2.2) { } }; //+------------------------------------------------------------------+ #define alive(node) (CheckPointer(node)==POINTER_DYNAMIC) #define loopf(type, node) for(type *o; o=node;) //+------------------------------------------------------------------+ void OnStart() { CList *base=new CList; CMyclass *res; for(int i=0;i<3;i++) { base.Add(new CMyclass); loopf(CMyclass,base.GetCurrentNode()){ o.x = 99; res.y = 555;} } for(int i=0;i<3;i++) { res=base.GetNodeAtIndex(i); Print(res.x," : ",res.y); } delete base; } //+------------------------------------------------------------------+ Igor Makanu 2018.12.27 21:16 #23617 TheXpert:((CMyclass*)base.GetNodeAtIndex(i)).xHOORAY!IT WORKED!!! ありがとうございました。 #property strict #include <Object.mqh> #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CMyclass:public CObject { public: int x; double y; void CMyclass(void):x(-1),y(-2.2) { } }; //+------------------------------------------------------------------+ void OnStart() { CList *base=new CList; for(int i=0;i<3;i++) { base.Add(new CMyclass); ((CMyclass*)base.GetCurrentNode()).x = 99; ((CMyclass*)base.GetCurrentNode()).y = 555; } for(int i=0;i<3;i++) { Print(((CMyclass*)base.GetNodeAtIndex(i)).x," : ",((CMyclass*)base.GetNodeAtIndex(i)).y); } delete base; } //+------------------------------------------------------------------+ ;) Ilya Malev 2018.12.27 21:53 #23618 Igor Makanu:私はそれを試してみましたが、私はまだdefansで動作する方法がわからない、科学は複雑です、私はエラーが発生しました: tst_file EURUSD,H1: 'tst_file.mq4' で無効なポインタアクセス(31,56)。 もし私のループがあなたのライブラリノードで動くとしたら、とても驚きです))) もちろん前回の投稿のtypedefのコードのことです))) イゴール・マカヌHOORAY!IT WORKED!!! ありがとうございます。 ;) 本当に、なぜ一番わかりやすいものをすぐに試さなかったのでしょうか。:)そんなにtypedefとロックしたかったの?=))) Igor Makanu 2018.12.27 22:10 #23619 Ilya Malev:本当に、なぜ一番わかりやすいものを最初に試さなかったんだ?:)そんなにtypedefでロックしたかったんですか?=)))試してみました!MQLを使ってポインタを 参照解除するのは無理だろうと思っていましたが、些細なことであることがわかりました。)))) ZS: typedefはトピックですね。私も試してみたのですが、うまくいきませんでした。 Ilya Malev 2018.12.27 23:07 #23620 Alexandr Sokolov:M1チャートだけ動作しないことがあるが、他のチャートでは正常に動作しているのはなぜか?(MQL5)です。以下はその関数です。M1チャートで0を与えると、なぜか1つの変数の合計が出ません。 これは、Open = Close のローソク足が存在することを意味しますが、コードの書き方が間違っており、0による除算のチェックが入っていません。この残念な事実は、TFには関係ありません。 1...235523562357235823592360236123622363236423652366236723682369...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
リストの基底クラスとしてCNode(Prev()、Next()などのメソッドを持つ)を用意し、その子孫であるCOrderのフィールドをループで呼び出しています。ループは、その子孫であるCOrderのフィールドを呼び出します。ループはdefinesで1回だけ宣言され、あとはいたるところで使われる。
あなたの例に従おうとしましたが、typedefを使いたいのです。
今、コンパイラは私の例をスキップしますが、私は...何かが必要です...しかし、何? 実行時にエラーが発生します。
tst_file.mq4' 内の無効な関数 ポインタ呼び出し (30,7)
あなたの言う通り、あなたの例を試してみましたが、私はtypedefを使いたいのです。
今、コンパイラは私の例をスキップしていますが、私は・・・何か必要です・・・でも何?
tst_file.mq4' 内の無効な関数 ポインタ呼び出し (30,7)
なので、関数を書いて、ポインタに代入する必要があります)))
そのため、関数を書いてポインタに代入する必要があります)))
ふむ、なるほどと思いつつ、では、次のように関数を書くと、クラスフィールドに対応するポイントがないのです。
PtrCMyclass Myclass(CObject* obj){ return(GetPointer(obj)); }.PtrCMyclass Myclass(CObject* obj) { return(GetPointer(obj)); };
'x' - struct or class type expected tst_file.mq4 30 38
((CMyclass*)base.GetNodeAtIndex(i)).x
上に書いたように試してみてください。typedefはコードと関数呼び出しの 間の余分な「スペーサー」であるため、ここでは必要ないのだが。それでも、同じポインタを使った別のクラスで、この呼び出しをオーバーロードすることはできません。クラスごとに新しく作る必要があります。そろそろ型定義は全く役に立たないということを理解してもいい頃だと思うのですが、いかがでしょう :)
私はそれを試してみましたが、私はまだdefansで動作する方法がわからない、科学は複雑です、私はエラーが発生しました: tst_file EURUSD,H1: 'tst_file.mq4' で無効なポインタアクセス(31,56)。
((CMyclass*)base.GetNodeAtIndex(i)).x
HOORAY!IT WORKED!!!
ありがとうございました。
;)
私はそれを試してみましたが、私はまだdefansで動作する方法がわからない、科学は複雑です、私はエラーが発生しました: tst_file EURUSD,H1: 'tst_file.mq4' で無効なポインタアクセス(31,56)。
もし私のループがあなたのライブラリノードで動くとしたら、とても驚きです)))
もちろん前回の投稿のtypedefのコードのことです)))
HOORAY!IT WORKED!!!
ありがとうございます。
;)
本当に、なぜ一番わかりやすいものをすぐに試さなかったのでしょうか。:)そんなにtypedefとロックしたかったの?=)))
本当に、なぜ一番わかりやすいものを最初に試さなかったんだ?:)そんなにtypedefでロックしたかったんですか?=)))
試してみました!MQLを使ってポインタを 参照解除するのは無理だろうと思っていましたが、些細なことであることがわかりました。))))
ZS: typedefはトピックですね。私も試してみたのですが、うまくいきませんでした。
M1チャートだけ動作しないことがあるが、他のチャートでは正常に動作しているのはなぜか?(MQL5)です。以下はその関数です。M1チャートで0を与えると、なぜか1つの変数の合計が出ません。
これは、Open = Close のローソク足が存在することを意味しますが、コードの書き方が間違っており、0による除算のチェックが入っていません。この残念な事実は、TFには関係ありません。