エラー、バグ、質問 - ページ 2563 1...255625572558255925602561256225632564256525662567256825692570...3185 新しいコメント Andrey Barinov 2019.09.17 18:04 #25621 Igor Makanu: https://www.mql5.com/ru/docs/basis/oop/staticmembers ? Igor Makanu 2019.09.17 18:11 #25622 Andrey Barinov: ? 例ではstatic修飾子を持って いますが、これを削除すると、コンパイラは当然のように警告を出します staticは、コンテキスト解決演算子を使って、 コードのどの部分からも アクセスできます。を、どのようなコード断片からも 得ることができます。 (最近確認していないのでスコープを覚えていませんが、ほとんどの場合、コードの一番上に記述されているように、つまり、静的メソッド/フィールドがどこで宣言されたかは関係なく、グローバルであることが予想されます) Andrey Barinov 2019.09.17 18:15 #25623 Igor Makanu: statikは、コンテキスト解決文を使って、 コードのどの部分からも アクセスすることができます...を、コードのどの 部分からでも (最近確認していないのでスコープを覚えていませんが、ほとんどの場合、コードの一番上に記述されているように、つまり、静的メソッド/フィールドがどこで宣言されていても問題ないように、グローバルになっているはずです) いつからそうなったのでしょうか :)? 静的なもの(private, protected, public)にも同じルールが適用されますが、オブジェクトの作成が 必要ないだけです。 これは明らかなバグです。 Igor Makanu 2019.09.17 18:39 #25624 Andrey Barinov: いつからこうなったのでしょうか :)? 数ヶ月前、@Ilyas 管理者が静的変数の初期化手順について説明し、静的メソッドと静的フィールドは MQL プログラム起動時にグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。 アンドレイ・バリノフ 静的なもの(private, protected, public)にも同じルールが適用されますが、オブジェクトの作成が 必要ないだけです。 これは明らかなバグです。 議論する気はないし、したくないが、ヘルプテキストには静的メソッドの動作が示されている MQLのコードは、C#プログラムの動作に向けて大きく前進していますが、状況はそこでも同様です。プログラマがコンテキスト解決演算子を使用することを決定した場合、それは彼が意識的にクラス内のデータの整合性の違反を識別するためにコンパイラの助けを拒否することを意味し、コンテキスト解決演算子なしでメソッドとフィールドを取得する古典的な方法があります。 UPD: MQLライブラリを少しずつ書き直すことにしたのですが、一般的なMQLコードで見られるように、メソッドやフィールドの名前が予約語の名前と一致していることに気づいてゾッとしています...これは、依存関係を「壊す」ときにコンパイラの助けを避けるためのステップでもあるようです...。まあまあ ))) TheXpert 2019.09.17 18:50 #25625 Igor Makanu: プログラマがコンテキスト解決演算子を使うことを決めた場合、それはコンパイラがクラス内のデータ整合性違反を検出するのを意識的に拒否したことを意味します。コンテキスト解決演算子を使わずにメソッドやフィールドを取得する古典的な方法があります。 OOPの吸い過ぎだと思います。 一度休んで、頭をスッキリさせてから戻ってきてください。 コンテキスト解決文は、可視性を定義しますが、アクセスには影響しません。 Igor Makanu 2019.09.17 19:10 #25626 TheXpert: コンテキスト解決文は、可視性を定義するが、アクセスには影響しない。 まあ、何を吸って、いつ休むかは自分次第ですが )))) SZY: メモリの内容にアクセスするどんな言語でも、常にたくさんのトリックがあります。 私はコメントでそこの趣味を読み、パイソンとc++についての定期的な戦いがあります、もう一度 - フィールドとメソッドを扱うより人道的な方法があります、あなたはそれが高速だと判断した場合、あなたが得るものを非難してはいけません - すべてのコンパイラであなたは常にあなたがすべきでない場所に侵入することができます))))。 Aliaksandr Hryshyn 2019.09.17 19:21 #25627 Igor Makanu: 数ヶ月前、@Ilyas 管理者が静的初期化手順について説明し、MQL プログラム起動時に静的メソッドと静的フィールドがグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。 議論する気はないし、する気もないが、ヘルプの文章は静的メソッドの動作を表している。 "private - あるクラスの変数やメソッドに、そのクラスのメソッドからのみアクセスできるように します。" のみ」という言葉のどこが不明瞭なのか? OnStartは、例によるとクラスAのメソッドではありません。 Igor Makanu 2019.09.17 19:28 #25628 Aliaksandr Hryshyn: "private - あるクラスの変数やメソッドに、そのクラスのメソッドからのみアクセスできるように します。" のみ」という言葉のどこが不明瞭なのか? OnStartは、例によるとクラスAのメソッドではありません。 private修飾子ではなく、static修飾 子について話しています - テストを行い、MQLでstaticがどのように動作するかを確認します。 Andrey Barinov 2019.09.17 19:33 #25629 Igor Makanu: 数ヶ月前、@Ilyas 管理者が静的初期化手順について説明し、MQL プログラム起動時に静的メソッドと静的フィールドがグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。 論争する気にはなれませんが、ヘルプテキストには静的メソッドの動作が示されています。 また、MQLはC#プログラムの挙動に近づいており、同様の状況です。プログラマがコンテキスト解決演算子を使うことを決めた場合、それは、クラス内のデータ整合性の侵害を特定するためのコンパイラの助けを意識的に拒否することを意味し、コンテキスト解決演算子を使わずにメソッドやフィールドを取得する古典的な方法が存在します。 UPD: MQLライブラリを少しずつ書き直すことにしたのですが、一般的なMQLコードで見られるように、メソッドやフィールドの名前が予約語の名前と一致していることに気づいてゾッとしています...これは、依存関係を「壊す」ときにコンパイラの助けを避けるためのステップでもあるようです...。まあまあ )))https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852 Igor Makanu 2019.09.17 19:42 #25630 Andrey Barinov: https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852 ? クラス以外のものはずっとスタ一で動いていたのに、私が騒いでいるだけという不思議な状況です......。試しに、自分でコードを再現してみてください。 int print(int value) { Print(value,":",__FUNCTION__); return(value); } class A { private: static int a1; protected: static int a2; public: static int a3; }; //+------------------------------------------------------------------+ static int A::a1 = print(1); static int A::a2 = print(2); static int A::a3 = print(3); //+------------------------------------------------------------------+ void OnStart() {} //+------------------------------------------------------------------+ オブジェクトのインスタンスが表示されますか?で、MQLに存在する;) SZZ:しかも、ヘルプのレベルで存在する...何が不満なんだ? https://www.mql5.com/ru/docs/basis/oop/staticmembers クラスのメンバを静的に宣言できないと、このデータをグローバルなプログラムレベルで宣言する必要が生じます。 これでは、データとそのクラスの関係が切れてしまいますし、データとそれを扱うメソッドをクラスで組み合わせるという、基本的なOOPのパラダイムとも矛盾しています。静的メンバは、個々のインスタンスに固有のものではないクラスデータを、クラスのスコープ内に存在させることができます。 1...255625572558255925602561256225632564256525662567256825692570...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
https://www.mql5.com/ru/docs/basis/oop/staticmembers
?
?
例ではstatic修飾子を持って いますが、これを削除すると、コンパイラは当然のように警告を出します
staticは、コンテキスト解決演算子を使って、 コードのどの部分からも アクセスできます。を、どのようなコード断片からも 得ることができます。 (最近確認していないのでスコープを覚えていませんが、ほとんどの場合、コードの一番上に記述されているように、つまり、静的メソッド/フィールドがどこで宣言されたかは関係なく、グローバルであることが予想されます)
statikは、コンテキスト解決文を使って、 コードのどの部分からも アクセスすることができます...を、コードのどの 部分からでも (最近確認していないのでスコープを覚えていませんが、ほとんどの場合、コードの一番上に記述されているように、つまり、静的メソッド/フィールドがどこで宣言されていても問題ないように、グローバルになっているはずです)
いつからそうなったのでしょうか :)?
静的なもの(private, protected, public)にも同じルールが適用されますが、オブジェクトの作成が 必要ないだけです。
これは明らかなバグです。
いつからこうなったのでしょうか :)?
数ヶ月前、@Ilyas 管理者が静的変数の初期化手順について説明し、静的メソッドと静的フィールドは MQL プログラム起動時にグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。
静的なもの(private, protected, public)にも同じルールが適用されますが、オブジェクトの作成が 必要ないだけです。
これは明らかなバグです。
議論する気はないし、したくないが、ヘルプテキストには静的メソッドの動作が示されている
MQLのコードは、C#プログラムの動作に向けて大きく前進していますが、状況はそこでも同様です。プログラマがコンテキスト解決演算子を使用することを決定した場合、それは彼が意識的にクラス内のデータの整合性の違反を識別するためにコンパイラの助けを拒否することを意味し、コンテキスト解決演算子なしでメソッドとフィールドを取得する古典的な方法があります。
UPD: MQLライブラリを少しずつ書き直すことにしたのですが、一般的なMQLコードで見られるように、メソッドやフィールドの名前が予約語の名前と一致していることに気づいてゾッとしています...これは、依存関係を「壊す」ときにコンパイラの助けを避けるためのステップでもあるようです...。まあまあ )))
Igor Makanu:
プログラマがコンテキスト解決演算子を使うことを決めた場合、それはコンパイラがクラス内のデータ整合性違反を検出するのを意識的に拒否したことを意味します。コンテキスト解決演算子を使わずにメソッドやフィールドを取得する古典的な方法があります。
OOPの吸い過ぎだと思います。 一度休んで、頭をスッキリさせてから戻ってきてください。 コンテキスト解決文は、可視性を定義しますが、アクセスには影響しません。
コンテキスト解決文は、可視性を定義するが、アクセスには影響しない。
まあ、何を吸って、いつ休むかは自分次第ですが ))))
SZY: メモリの内容にアクセスするどんな言語でも、常にたくさんのトリックがあります。 私はコメントでそこの趣味を読み、パイソンとc++についての定期的な戦いがあります、もう一度 - フィールドとメソッドを扱うより人道的な方法があります、あなたはそれが高速だと判断した場合、あなたが得るものを非難してはいけません - すべてのコンパイラであなたは常にあなたがすべきでない場所に侵入することができます))))。
数ヶ月前、@Ilyas 管理者が静的初期化手順について説明し、MQL プログラム起動時に静的メソッドと静的フィールドがグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。
議論する気はないし、する気もないが、ヘルプの文章は静的メソッドの動作を表している。
"private - あるクラスの変数やメソッドに、そのクラスのメソッドからのみアクセスできるように します。"
のみ」という言葉のどこが不明瞭なのか?
OnStartは、例によるとクラスAのメソッドではありません。
"private - あるクラスの変数やメソッドに、そのクラスのメソッドからのみアクセスできるように します。"
のみ」という言葉のどこが不明瞭なのか?
OnStartは、例によるとクラスAのメソッドではありません。
private修飾子ではなく、static修飾 子について話しています - テストを行い、MQLでstaticがどのように動作するかを確認します。
数ヶ月前、@Ilyas 管理者が静的初期化手順について説明し、MQL プログラム起動時に静的メソッドと静的フィールドがグローバル変数と一緒に初期化されると述べたことは確かです... さらに彼の投稿を検索してください。
論争する気にはなれませんが、ヘルプテキストには静的メソッドの動作が示されています。
また、MQLはC#プログラムの挙動に近づいており、同様の状況です。プログラマがコンテキスト解決演算子を使うことを決めた場合、それは、クラス内のデータ整合性の侵害を特定するためのコンパイラの助けを意識的に拒否することを意味し、コンテキスト解決演算子を使わずにメソッドやフィールドを取得する古典的な方法が存在します。
UPD: MQLライブラリを少しずつ書き直すことにしたのですが、一般的なMQLコードで見られるように、メソッドやフィールドの名前が予約語の名前と一致していることに気づいてゾッとしています...これは、依存関係を「壊す」ときにコンパイラの助けを避けるためのステップでもあるようです...。まあまあ )))
https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852
?
クラス以外のものはずっとスタ一で動いていたのに、私が騒いでいるだけという不思議な状況です......。試しに、自分でコードを再現してみてください。
オブジェクトのインスタンスが表示されますか?で、MQLに存在する;)
SZZ:しかも、ヘルプのレベルで存在する...何が不満なんだ?
https://www.mql5.com/ru/docs/basis/oop/staticmembers
クラスのメンバを静的に宣言できないと、このデータをグローバルなプログラムレベルで宣言する必要が生じます。 これでは、データとそのクラスの関係が切れてしまいますし、データとそれを扱うメソッドをクラスで組み合わせるという、基本的なOOPのパラダイムとも矛盾しています。静的メンバは、個々のインスタンスに固有のものではないクラスデータを、クラスのスコープ内に存在させることができます。