错误、漏洞、问题 - 页 710 1...703704705706707708709710711712713714715716717...3184 新评论 Anatoli Kazharski 2012.04.09 10:51 #7091 需要确定一个 可变数组的大小,但错误出来了。void OnStart() { int j=1000; //--- double arrBalancesTS[][j]; } //---//---它可以直接与常量(#define)和一个数值一起工作,但不是这样的。为什么? Valerii Mazurenko 2012.04.09 10:55 #7092 tol64:需要确定一个可变数组的大小,但错误出来了。 //---//---它可以直接与常量(#define)和一个数值一起工作,但不是这样的。为什么? 对于常量,它是一个静态数组,而对于变量,它是动态的。而一个动态的大小是由ArrayResize决定的 Документация по MQL5: Основы языка / Типы данных / Объект динамического массива www.mql5.com Основы языка / Типы данных / Объект динамического массива - Документация по MQL5 TheXpert 2012.04.09 10:55 #7093 tol64: 为什么? 第二和后续的维度有一个固定的尺寸。它只能由一个常数来设定。 Rashid Umarov 2012.04.09 10:56 #7094 tol64:对于常量(#define)和数字值,它可以直接工作,但不是这样的。为什么?因为当用#define 定义时,编译器只是在编译前 将遇到的宏替换为正确的条目。因此,它看到 void OnStart() { //--- double arrBalancesTS[][1000]; }这与MQL5语言不相矛盾。 Rashid Umarov 2012.04.09 11:21 #7095 Yedelkin:好的。那我就壮壮胆子吧。因此,Print() 函数的描述说" 双倍类型的 数据以点后16 位小数的精度打印"。事实上,事实证明,Print()函数输出的数据有些圆滑。ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0 MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999999716重点是,一个实数 在内存中存储的有效数字不超过17位。试试这个例子,感受一下差异。//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); Print("Print(StringFormat(b,%.15G))=",StringFormat("%.15G",b)); Print("Print(StringFormat(b,%.16G))=",StringFormat("%.16G",b)); Print("Print(StringFormat(b,%.17G))=",StringFormat("%.17G",b)); Print("Print(StringFormat(b,%.18G))=",StringFormat("%.18G",b)); //19999999999999997 Print("Print(StringFormat(b,%.15f))=",StringFormat("%.15f",b)); Print("Print(StringFormat(b,%.16f))=",StringFormat("%.16f",b)); Print("Print(StringFormat(b,%.17f))=",StringFormat("%.17f",b)); } //+------------------------------------------------------------------+ 帮助中的描述将被纠正。 Anatoli Kazharski 2012.04.09 11:46 #7096 notused: 对于常量,它是一个静态数组,而对于变量,它是动态的。而一个动态的大小是用ArrayResize来确定的。TheXpert。 第二和后续的维度有一个固定的尺寸。它只能由一个常数来设定。罗什。因为当用#define 定义时,编译器只是在编译前 将遇到的宏替换为正确的条目。因此,它看到 这与MQL5语言不相矛盾。 谢谢你。你能告诉我,如果一个数组的一维和二维的大小是在计算中定义的,并且不能是一个常数,那么可以怎么做?使用ArrayResize(),你毕竟只能调整第一维的大小。还有,为什么我可以通过应用一个变量值来调整一个数组的大小,而最初却不能设置? --- 2012.04.09 11:47 #7097 tol64: 谢谢你。你能告诉我,如果一个数组的一维和二维的大小都是由计算决定的,不能是一个常数,该怎么做?使用ArrayResize(),你只能改变第一个维度的大小。还有,为什么你可以用变量调整数组的大小,而最初却不能设置? 请使用类。 Rashid Umarov 2012.04.09 11:49 #7098 tol64: 谢谢你。你能告诉我,如果一个数组的一维和二维的大小都是由计算决定的,不能是一个常数,该怎么做?使用ArrayResize(),你只能改变第一个维度的大小。还有,为什么我可以通过应用一个变量值来调整一个数组的大小,而最初却不能设置? 看一下重载操作 部分,看看CMatrix类的例子,也许这对你有用。 speedy 2012.04.09 12:10 #7099 你好。我找不到如何使2个班级交换信息。我想让A类与B类有一个链接,B类与A类有一个链接。我得到一个编译错误,也许MQL5不允许这样做。但如果没有它,对象编程的使用率为30%。解决办法可能是写一个大的GOD类,它知道并知道一切。但在我看来,这并不十分优雅。谁可以帮助解决这个问题?提前感谢! Rashid Umarov 2012.04.09 12:23 #7100 类的前向声明,见前向声明 1...703704705706707708709710711712713714715716717...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
需要确定一个 可变数组的大小,但错误出来了。
//---
//---
它可以直接与常量(#define)和一个数值一起工作,但不是这样的。为什么?
需要确定一个可变数组的大小,但错误出来了。
//---
//---
它可以直接与常量(#define)和一个数值一起工作,但不是这样的。为什么?
tol64:
为什么?
对于常量(#define)和数字值,它可以直接工作,但不是这样的。为什么?
因为当用#define 定义时,编译器只是在编译前 将遇到的宏替换为正确的条目。因此,它看到
这与MQL5语言不相矛盾。
好的。那我就壮壮胆子吧。因此,Print() 函数的描述说" 双倍类型的 数据以点后16 位小数的精度打印"。事实上,事实证明,Print()函数输出的数据有些圆滑。
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999999716
重点是,一个实数 在内存中存储的有效数字不超过17位。
试试这个例子,感受一下差异。
帮助中的描述将被纠正。对于常量,它是一个静态数组,而对于变量,它是动态的。而一个动态的大小是用ArrayResize来确定的。
第二和后续的维度有一个固定的尺寸。它只能由一个常数来设定。
因为当用#define 定义时,编译器只是在编译前 将遇到的宏替换为正确的条目。因此,它看到
这与MQL5语言不相矛盾。
谢谢你。你能告诉我,如果一个数组的一维和二维的大小都是由计算决定的,不能是一个常数,该怎么做?使用ArrayResize(),你只能改变第一个维度的大小。还有,为什么你可以用变量调整数组的大小,而最初却不能设置?
谢谢你。你能告诉我,如果一个数组的一维和二维的大小都是由计算决定的,不能是一个常数,该怎么做?使用ArrayResize(),你只能改变第一个维度的大小。还有,为什么我可以通过应用一个变量值来调整一个数组的大小,而最初却不能设置?