错误、漏洞、问题 - 页 1513

 

从性能的角度来看,哪个更好,像这样。

  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

还是通过重载方法

 
zaskok3:

从性能的角度来看,哪个更好,像这样。

还是通过重载方法

你不会看到在性能方面有任何差别--两种解决方案都有它们的位置 :)
 
coderex:
你不会看到在性能方面有什么不同--两种解决方案都有其用武之地 :)

谢谢你!另一个问题。

结构中的恒定字段的意义是什么?这样的结构甚至不能被传递(编译器发誓或堆栈溢出)?

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


为结构重载赋值运算符 实际上是不可能的(由于无限递归,它将是有意义的)。那么,为什么要在结构中设置恒定字段呢?

 
Karputov Vladimir:

在Windows 10 x64上,在1241版本上从未遇到过这个错误。在 "展开 "命令之后,图形窗口完全展开,没有任何洞。

你可能在你的操作系统内改变了一些设置(也许你喜欢修剪你的操作系统的默认值或清理注册表或类似的东西...)。

当用鼠标拖动玻璃时,在这一点上按下 "Shift "或 "Ctrl "或 "Alt"。

我最好的建议是给serviceDesk写信,提供详细的描述,并附上自己的代码(显示刻度)和屏幕截图。

>> 可能你改变了你的操作系统内部的一些设置(也许你热衷于削减你的操作系统的标准功能,或注册表清理,等等)。

我不喜欢那种东西,系统是干净的

>> 在这里,我可以用详细的描述给你建议,用你的代码(显示抽搐),用截图给ServiceDesk做一个申请

我认为这个分支是一个很好的例子。

 

如果我使用#include将一个包含类似内容的mqh-文件纳入指标。

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

在指标本身的编译阶段没有错误。但它与mqh单独出现(见上文)。

我怎样才能在MT4中找到这个属性指标的值,以便编译器不会在插入的mqh中抱怨不止一次?

 

我正在努力确保应用程序在MQL5和MQL4中的操作是相同的。

我怀疑在MQL4中引入sinput 变量时,他们忘了在语言中添加ParameterSetRange()和ParameterGetRange()函数。

它们出现在MQL4文档中的ParameterSetRange()和ParameterGetInput()-https://docs.mql4.com/basis/variables/inputvariables#sinput

但编译器不会接受它们。

不幸的是,如果没有这些函数,sinput变量的所有乐趣都会消失。

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3:

谢谢你!另一个问题。

结构中的恒定字段的意义是什么?这样的结构甚至不能被传递(编译器发誓或堆栈溢出)?


为结构重载赋值运算符 几乎是不可能的(因为无限递归,所以会有意义)。那么,为什么要在结构中设置恒定字段呢?

请享受。

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

请享受。

直奔主题的感觉很好,谢谢你!我还在想,为什么我在重载构造函数之前没有自己弄清楚,而是进入了赋值运算符。毕竟,解决方案是显而易见的!
 

将MT4终端文件夹移至另一个驱动器。以前我用便携式钥匙运行它。我这次也做了同样的事情。

终端一下子就连接到了服务器。过去,当我移动一个终端文件夹 时,密码没有被保存--我不得不重新输入。现在(build 950),这种情况没有发生。

这是否正常(而且只对我而言)?

 
zaskok3:

从性能的角度来看,还有什么更好的方法呢?

当然是超载了。