错误、漏洞、问题 - 页 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()将在返回时失败。这就是为什么我的目光落在了课堂上,但那里有描述的陷阱在等待。
 

一般来说,你可以重写构造函数copy和operator=。

这对类是不起作用的,它们应该只通过指针返回,结构可以通过值返回。

 
Комбинатор:

一般来说,你可以重写构造函数copy和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;
}
 

优化专家顾问的 过程中,我得到以下错误

在0:37:20.429+历史同步0:00:43.395测试的(0, 3)出现了 "OnTimer函数中的关键运行时错误512(睡眠函数达到测试结束)"的错误。

单个测试通过,没有错误。

MT5和MetaEditor的版本是1571。

 
pivomoe:

优化专家顾问的 过程中,我得到以下错误

在0:37:20.429的 "OnTimer函数中的关键运行时间错误512(睡眠函数达到测试结束)"错误+历史同步0:00:43.395

从 "专家顾问 "中删除最大数量的代码,这样就可以重现错误了。并公布剩余的代码。