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

 
Ilyas:

その理由はだいたいわかりました。グローバル変数が あるのですが

CArrayObj actobjects;

mcl環境とミッションの初期化順序の何かで、どうやらactobjectsがポインタで、そこに自分で配列を置くと、何もクラッシュしないようです。グローバル変数にクラス - 悪い習慣です、もちろん書き直します。しかし、関数内の静的配列では問題が発生します(µlでは、関数への最初のエントリで初期化するというルールは機能しません)。

一般的に、バグとしてカウントされるのであれば、おおよその原因がわかるので、ローカライズできるかもしれませんね。

 
pavlick_:

とにかく、バグとしてカウントされるのであれば、原因がおおよそわかっているので、ローカライズできるのだと思います。

いや、捕捉できない、コードを切り出すと奇跡的に消える。いくつかの行をコメントアウトしても(クラッシュの前に実行されない)影響があります。

 

長いコードクラスがあり、それはmqhにある。元のクラスとは2行だけ異なる、まったく同じクラスを作成する必要があります(記号が少ない代わりに、記号が多くなるはずです)。

これは、ほとんど同じmqhをもう一つ作らずにできるのでしょうか?


授業が短いときは、複数行のマクロで作ると、すべてが簡単に出てきます。でも、ここのコードは長いんです。

1つのmqhを修正すると、2つ目のmqhですべての操作を繰り返さなければならないので、mqhクローンを作りたくありません。さらに、物忘れや不注意という人的要因もある。


やはりテンプレートクラスでやるのがいいのでしょう。しかし、それが実行速度にどう影響するかは、まったくわからない。クイックランのために必要なクラスです。

 
fxsaber:
#ifdef
 
TheXpert:
#ifdef

うまくいかない。両方のクラスが動作している必要があります。

 
fxsaber:

うまくいかない。両方のクラスが動作していること。

問題ないと思います。

_____________

インヘリタンス

しゅるいほうふ

 
TheXpert:

問題ないと思います。

_____________

インヘリタンス

異なるものを別々の少人数クラスにする

1つのクラスには、それなりの大きさのメソッドがいくつかあります。各方法とも、「>」記号を「<」記号に置き換えるだけです。

このような仮想を使うことができます。
class A
{
private:
  virtual bool Compare()
  {
    return(true);
  }
public:

  bool f()
  {
    return(this.Compare());
  }
};

class B : public A
{
private:
  virtual bool Compare()
  {
    return(false);
  }
};


void OnStart()
{
  A a;
  B b;
  
  Print(a.f());
  Print(b.f());
}


しかし、残念ながら、まだクラスの初期化値を渡す必要があります。ということは、やっぱりテンプレートを使うしかないんでしょうかね。

 
fxsaber:

私ならテンプレートパラメータでいくつかのアダプタを渡しますが(そこにブレーキはないはずです)、もしあなたがそんなに不器用になりたいなら、あなたもできますよ。ヘッダーファイルへのハードリンクを作成する(mklink /H <link> <target>, if I'm not mistaken.Windows create hard link」でググってみてください)。そして、通常の方法でこれらを有効にします

#define _N C1    // имя класса
#define _M "c1"  // какой-то параметр
#include <qq.mqh>
#undef _N
#undef _M
#define _N C2
#define _M "c2"
#include <ee.mqh> // жёсткая ссылка на qq.mqh
#undef _N
#undef _M
 
pavlick_:

私ならテンプレートパラメータでいくつかのアダプタを渡しますが(そこにブレーキはないはずです)、もしあなたがそんなに不器用になりたいなら、あなたもできますよ。ヘッダーファイルへのハードリンクを作成する(mklink /H <link> <target>, if I'm not mistaken.Windows create hard link」でググってみてください)。そして、いつものようにプラグを差し込むだけです。

論点がずれていますね。

 
fxsaber:

質問を理解していない。

えーと、よくわからないのですが、本当にわかっているのでしょうか? 念のため、qq.mqhとee.mqhのリスト(一つの実体で、一方を変更するともう一方も変更されます)

class _N
{
public:
   void f() {Alert(_M);}
};

すべて注文通り、クラスはインマクロスではなく、_M.A.以外はほぼ同じです。

理由: