汎用クラスライブラリ - バグ、説明、質問、使用上の特徴、提案 - ページ 25 1...181920212223242526272829303132...38 新しいコメント TheXpert 2019.04.03 08:58 #241 Andrey Pogoreltsev:ただ、組み込み型にしか使えないのに、なぜコレクションを作り、コドベースに入れるのか)?組み込み構造にも向いていない。 Igor Makanu 2019.04.03 09:50 #242 Andrey Pogoreltsev:教えてください、何か理解できていないかもしれませんが、このタイプの構造を使おうとすると。 エラーが発生するのですが。 'Option' - オブジェクトは参照渡しのみ ICollection.mqh 14 18 で、次にエラーがいっぱい...。これは動作しませんが、テンプレートテンプレートを通じて行う必要があり、私もこの問題に取り組んで、ここでテスト例では、それが正常に動作しているようだ class CData - リストに格納したい構造体. CDataBase - リストそのもの #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; datetime t; }; //+------------------------------------------------------------------+ template<typename TDB>class CDataBase { private: CList *mlist; TDB *TDBptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } TDB *operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (TDB &value){ TDBptr = new TDB; TDBptr = value; mlist.Add(TDBptr); } string TypeName() { return(typename(TDB)); } }; //+------------------------------------------------------------------+ // проверка, запишем распринтуем значения void OnStart() { CDataBase<CData>*data=new CDataBase<CData>; CData *my=new CData; int i; Print("1------------------------------------"); for(i=0; i<10; i++) { my.x=i; my.y= i*2; data.AddValue(my); Print(i," : ",data[i].x," , ",data[i].y," / ",my.x," ,",my.y); } Print("2------------------------------------"); for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete my; delete data; } //+------------------------------------------------------------------+ OnStart()では、リストを作成し、そこに値を書き込んでから読み込んでいます。 2回チェックしましたが、最初のどこかで、リストに書き込むときにローカル 変数の可視性が失われたため、書き込みはすべてOKでしたが、読み込むときにヌルポインタが発生してエラーになりました。 Vasiliy Sokolov 2019.04.03 10:27 #243 Igor Makanu:そのように動作しません、あなたはテンプレートテンプレートを使用する必要があります、私はあまりにもこの問題を扱っていた、私はテスト例を作成し、それはすべて正しく動作しているようです。 class CData - リストに格納したい構造体. CDataBase - リストそのもの OnStart () で、リストを作成し、そこに値を書き込んでから、それを読み取る。 私はそれを2回チェックします。なぜなら、まず、リストに書き込むときに、ローカル 変数のどこかの可視性を失ったからです。私はすべて大丈夫でしたが、読み取るときに、ヌルポインタとエラーが発生しましたCDataはまだクラスであり、構造体ではないので、あなたのコードは動作します。クラスと構造体のジェネレータを一度に使おうとすると、特にdelete演算子で問題が発生します。私は、この「ジェネリック」を使った自分の実験を通して、それを確信しました。重要なのは、この「汎用」ライブラリには削除オペレータが全くなく、このような「コレクション」に新しいクラスを追加すると、プログラムを終了した後、多くのオブジェクトが失われることになる、ということです。つまり、もともとこのジェネリックは、プリミティブ型のためだけに書かれたものであることが明らかだ。 Igor Makanu 2019.04.03 10:34 #244 Vasiliy Sokolov:CDataは構造体ではなくクラスなので、このコードでうまくいきます。クラスと構造体に対して同時にジェネリックを使おうとすると、特にdelete演算子で問題が発生します。私は、この「ジェネリック」を使った自分の実験を通して、それを確信しました。重要なのは、この「汎用」ライブラリには削除オペレータが全くなく、このような「コレクション」に新しいクラスを追加すると、プログラムを終了した後に多くのオブジェクトが失われることです。つまり、もともとこのジェネリックは、プリミティブ型に対してのみ書かれていたことがわかる。私はMQLで構造体を使うのをやめました。構造体には何の利点もありませんが、構造体で作業していると常にバグが発生し、時間を無駄にします。構造体に関する質問で古い管理者の投稿を読みましたが、彼らは基本的に構造体の代わりにクラスを使えと言います。 SZZ:構造体を使わなくなった時に見つけたものhttps://www.mql5.com/ru/forum/6343/page866#comment_7541747 Вопросы от начинающих MQL5 MT5 MetaTrader 5 2018.05.23www.mql5.com Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000... fxsaber 2019.04.03 10:34 #245 Andrey Pogoreltsev:なぜ、コレクションを作り、組み込み型にしか使えないのに、コドベースに入れるのか)?標準装備されている利便性。それゆえ、引っ張る必要はなく、どのユーザーも持っているのです。 私は、あるKBリブでこれを長く使っています。 Andrey Pogoreltsev 2019.04.04 07:01 #246 Igor Makanu:そのように動作しません、あなたはテンプレートテンプレートを使用する必要があります、私はあまりにもこの問題を扱っていた、私はテスト例を作成し、それはすべて正しく動作しているようです。 class CData - リストに格納したい構造体. CDataBase - リストそのもの OnStart()で - リストを作成し、それに値を書き込み、その後、私はそれをチェックする2回、最初のどこかで私はリストに書き込むときにローカル 変数の可視性を失ったので - 私はすべて大丈夫を書くために使用されますが、私が読んだとき、私はヌルポインターが読み込まれ、エラーが発生しました。まず、リスト上でアロケーターを実装し、そこにポインターを格納しています。だけでなく、破壊するときに漏れがある)。 次に、代入演算子ではなく、コピーコンストラクタを正しく使用する必要がありました。しかし、これはすべてIMHOです) そして最も重要なことは、開発者はジェネリックを最終化し、内部にアロケータを作り、カスタムオブジェクトをサポートすればいいということです。C++はすでに彼らのためにすべてを発明しました)そして、私たちは自転車を発明する必要はありません。 Igor Makanu 2019.04.04 08:01 #247 Andrey Pogoreltsev:まず、リスト上でアロケーターを実装し、そこにポインターを格納していますね。それだけでなく、破壊に関するリークもある)どのようにして漏れを発見したのですか? SZZ:テスト例です。MQLでリストをどう扱うかを考えなければならなかったので、テストを作りました。 TheXpert 2019.04.04 08:04 #248 Andrey Pogoreltsev:そして最も重要なことは、開発者はジェネリックスを完成させ、内部にアロケーターを作り、カスタムオブジェクトをサポートすればよいということです。C++はすでに彼らのためにすべてを発明しました)そして、私たちは自転車を発明する必要はありません。そんな簡単なことなら書いてしまえ。 Andrey Pogoreltsev 2019.04.04 15:07 #249 Igor Makanu:どのように漏れを発見したのですか? ZS: これはテスト例で、MQLでリストをどう扱うかを考えなければならなかったので、テストを作りました。AddValueではnewでオブジェクトのコピーを作成しますが、デストラクタでそれらを解放せず、ポインタリストをクリアするだけです。 Andrey Pogoreltsev 2019.04.04 15:09 #250 TheXpert:は、そんな簡単なことなら書く。時間と必要性があれば、書きます。また、一般的な例として、1つのベアリングモデルしか必要としない場合、自社でベアリング工場を設立するのは良い考えとは言えません) 1...181920212223242526272829303132...38 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ただ、組み込み型にしか使えないのに、なぜコレクションを作り、コドベースに入れるのか)?
組み込み構造にも向いていない。
教えてください、何か理解できていないかもしれませんが、このタイプの構造を使おうとすると。
エラーが発生するのですが。
'Option' - オブジェクトは参照渡しのみ ICollection.mqh 14 18
で、次にエラーがいっぱい...。これは動作しませんが、テンプレートテンプレートを通じて行う必要があり、私もこの問題に取り組んで、ここでテスト例では、それが正常に動作しているようだ
class CData - リストに格納したい構造体.
CDataBase - リストそのもの
OnStart()では、リストを作成し、そこに値を書き込んでから読み込んでいます。 2回チェックしましたが、最初のどこかで、リストに書き込むときにローカル 変数の可視性が失われたため、書き込みはすべてOKでしたが、読み込むときにヌルポインタが発生してエラーになりました。
そのように動作しません、あなたはテンプレートテンプレートを使用する必要があります、私はあまりにもこの問題を扱っていた、私はテスト例を作成し、それはすべて正しく動作しているようです。
class CData - リストに格納したい構造体.
CDataBase - リストそのもの
OnStart () で、リストを作成し、そこに値を書き込んでから、それを読み取る。 私はそれを2回チェックします。なぜなら、まず、リストに書き込むときに、ローカル 変数のどこかの可視性を失ったからです。私はすべて大丈夫でしたが、読み取るときに、ヌルポインタとエラーが発生しました
CDataはまだクラスであり、構造体ではないので、あなたのコードは動作します。クラスと構造体のジェネレータを一度に使おうとすると、特にdelete演算子で問題が発生します。私は、この「ジェネリック」を使った自分の実験を通して、それを確信しました。重要なのは、この「汎用」ライブラリには削除オペレータが全くなく、このような「コレクション」に新しいクラスを追加すると、プログラムを終了した後、多くのオブジェクトが失われることになる、ということです。つまり、もともとこのジェネリックは、プリミティブ型のためだけに書かれたものであることが明らかだ。
CDataは構造体ではなくクラスなので、このコードでうまくいきます。クラスと構造体に対して同時にジェネリックを使おうとすると、特にdelete演算子で問題が発生します。私は、この「ジェネリック」を使った自分の実験を通して、それを確信しました。重要なのは、この「汎用」ライブラリには削除オペレータが全くなく、このような「コレクション」に新しいクラスを追加すると、プログラムを終了した後に多くのオブジェクトが失われることです。つまり、もともとこのジェネリックは、プリミティブ型に対してのみ書かれていたことがわかる。
私はMQLで構造体を使うのをやめました。構造体には何の利点もありませんが、構造体で作業していると常にバグが発生し、時間を無駄にします。構造体に関する質問で古い管理者の投稿を読みましたが、彼らは基本的に構造体の代わりにクラスを使えと言います。
SZZ:構造体を使わなくなった時に見つけたものhttps://www.mql5.com/ru/forum/6343/page866#comment_7541747
なぜ、コレクションを作り、組み込み型にしか使えないのに、コドベースに入れるのか)?
標準装備されている利便性。それゆえ、引っ張る必要はなく、どのユーザーも持っているのです。
私は、あるKBリブでこれを長く使っています。
そのように動作しません、あなたはテンプレートテンプレートを使用する必要があります、私はあまりにもこの問題を扱っていた、私はテスト例を作成し、それはすべて正しく動作しているようです。
class CData - リストに格納したい構造体.
CDataBase - リストそのもの
OnStart()で - リストを作成し、それに値を書き込み、その後、私はそれをチェックする2回、最初のどこかで私はリストに書き込むときにローカル 変数の可視性を失ったので - 私はすべて大丈夫を書くために使用されますが、私が読んだとき、私はヌルポインターが読み込まれ、エラーが発生しました。
まず、リスト上でアロケーターを実装し、そこにポインターを格納しています。だけでなく、破壊するときに漏れがある)。
次に、代入演算子ではなく、コピーコンストラクタを正しく使用する必要がありました。しかし、これはすべてIMHOです)
そして最も重要なことは、開発者はジェネリックを最終化し、内部にアロケータを作り、カスタムオブジェクトをサポートすればいいということです。C++はすでに彼らのためにすべてを発明しました)そして、私たちは自転車を発明する必要はありません。
まず、リスト上でアロケーターを実装し、そこにポインターを格納していますね。それだけでなく、破壊に関するリークもある)
どのようにして漏れを発見したのですか?
SZZ:テスト例です。MQLでリストをどう扱うかを考えなければならなかったので、テストを作りました。
そして最も重要なことは、開発者はジェネリックスを完成させ、内部にアロケーターを作り、カスタムオブジェクトをサポートすればよいということです。C++はすでに彼らのためにすべてを発明しました)そして、私たちは自転車を発明する必要はありません。
そんな簡単なことなら書いてしまえ。
どのように漏れを発見したのですか?
ZS: これはテスト例で、MQLでリストをどう扱うかを考えなければならなかったので、テストを作りました。
AddValueではnewでオブジェクトのコピーを作成しますが、デストラクタでそれらを解放せず、ポインタリストをクリアするだけです。
は、そんな簡単なことなら書く。
時間と必要性があれば、書きます。また、一般的な例として、1つのベアリングモデルしか必要としない場合、自社でベアリング工場を設立するのは良い考えとは言えません)