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

 

これは当たり前のことであり、全く正しいことです。動的オブジェクトの内部サイズ(ペイロードなし)を尋ねられました。

動的なオブジェクトにはArraySizeを使用 し、静的なオブジェクトにのみsizeofを適用する。Sizeofはコンパイル時にカウントされ、常に定数である。

 
Renat Fatkhullin:

これは当たり前のことであり、全く正しいことです。

動的なオブジェクトにはArraySizeを使用 し、静的なオブジェクトにのみsizeofを適用する。

ありがとうございました。この勧告に適合するように、ヘルプをお持ちください。
 

ドキュメントを最後まで読む

Вычисления размера происходит на этапе компиляции.

 

自分でガチガチに固まっているので、助けを求めているんです。このスクリプトを書いて説明します。

struct STRUCT 
{
  int a;
};

class CLASS
{
public:
  int a;
};

STRUCT f1()
{  
  static int i = 0;
  
  STRUCT Res;
  
  Res.a = i++;   
  
  return(Res);
}

CLASS* f2()
{
  static int i = 0;
  
  CLASS* Res = new CLASS;
  
  Res.a = i++;
  
  return(Res);
}

void OnStart()
{
  int i1 = f1().a + f1().a;  
  int i2 = f2().a + f2().a;
}

構造があり、似たようなクラスがある。i2計算の後、構造体オブジェクトと同じように、対応するクラスオブジェクトを i1計算の時に自然に削除して欲しい。どうすればいいのか?

 

fxsaber:

どうすればいいのでしょうか?

スマートポインタで包む、mqlでできるかどうかは不明
 
Комбинатор:
スマートポインターで包む、mqlで出来るかどうかわからないが
この問題自体は、複雑な構造を返すことができないことが原因です。例えば、上記のコードで、int a; の代わりにstring a; とすると、f1() は return で失敗します。そのため、授業に目が行ったのだが、そこには記述された罠が待っていた。
 

一般に、コンストラクタのコピーとoperator=をオーバーライドすることができます。

これはクラスには使えません。クラスはポインタのみで返され、構造体は値で返されることになっています。

 
Комбинатор:

一般に、コンストラクタのコピーとoperator=をオーバーライドすることができます。

これはクラスには使えません。クラスはポインタのみで返され、構造体は値で返されることになっています。

ありがとうございました。最近解除された制限によって、この解決策を阻まれたのです。現在、動作しています
struct STRUCT
{
  string Str;

  template <typename T>
  void operator =( const T Value )
  {
    Print(__FUNCTION__);
  }
  
  void operator =( const STRUCT &Struct )
  {
    this.Str = Struct.Str;
  }
};

STRUCT f()
{
  STRUCT Res;
  
  return(Res);
}

void OnStart()
{
  f() = 1;
}
 

Expert Advisorの最適化 中に以下のエラーが発生します。

(0, 3)は、0:37:20.429にエラー「OnTimer関数で重大な実行時エラー512(スリープ関数がテストの終わりに達する)」+履歴同期0:00:43.395でテストしました。

シングルテストはエラーなしで通過します。

MT5とMetaEditorのバージョンは1571です。

 
pivomoe:

Expert Advisorの最適化 中に以下のエラーが発生します。

0:37:20.429の「OnTimer関数で重大な実行時エラー512(スリープ関数がテストの終わりに到達)」エラー+履歴同期0:00:43.395

Expert Advisor から最大限のコードを削除し、エラーが再現できるようにします。そして、残ったコードを公開する。