错误、漏洞、问题 - 页 2473 1...246624672468246924702471247224732474247524762477247824792480...3184 新评论 Ilyas 2019.05.24 16:19 #24721 Sergey Dzyublik: 目前,不可能使用在模板类中声明的静态变量。 随着名称空间的引入,这种限制是否可以被绕过?是的,你可以。 代码将略有不同,更加正确,这里是一个例子。 //+------------------------------------------------------------------+ //| ScopeSample.mq5 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template<typename T> class A { public: struct Item { T value; Item(T initial=10):value(initial) { Print(__FUNCSIG__); } }; static Item s_default; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template<typename T> class B { public: struct Item { T value; Item(T initial=100):value(initial) { Print(__FUNCSIG__); } }; static Item s_default; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template<typename T> A::Item A::s_default; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template<typename T> B::Item B::s_default; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print(A<int>::s_default.value); Print(B<int>::s_default.value); } //+------------------------------------------------------------------+ 结果。 2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) A<int>::Item::Item(int) 2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) B<int>::Item::Item(int) 2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 10 2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 100 Sergey Dzyublik 2019.05.24 18:08 #24722 非常酷,非常感谢你。 是否有可能获得具有命名空间支持的MT的alpha权限? 真的需要作为研究的一部分,能够编写一个 "智能容器",而不是寻找错误/漏洞等等。 Sergey Dzyublik 2019.05.24 22:42 #24723 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 Sergey Dzyublik, 2019.05.23 13:52 我一直在与我的经纪人合作,我已经发现了MT中的十几个错误和 "特殊性"。 如何知道是否值得等待它们被修复? 请不要建议每次新版本出来时都测试所有东西。#(在MT5(build 2059)中没有修复)"当向模板函数传递(void*)(NULL)参数时出现编译错误"。#(在MT5(build 2059)中修复)"策略测试员:计划2次通过,但实际上由于 "OnInit critical error "错误,通过次数无限>900pc"。#(未在MT5(build 2059)中修复)"对于具有动态数组的结构,默认赋值运算符中的数组大小字段数值无效"。#(未在MT5(build 2059)中修复)"当从一个函数中按值返回一个类对象时,编译器没有看到默认的类复制构造器"。#(fix in MT5(build 2059))"编译器无法看到模式类和 "复杂 "结构 "本身 "的类型转换"。#(未在MT5(build 2059)中修复)"当使用typedef时,使用具有明确专业化的模板函数不会为该模板函数生成代码。#(未在MT5(build 2059)中修复)"在typedef中重复使用相同的函数签名时出现编译错误"。#(未在MT5(build 2059)中修复)"很大一部分处理字符串的函数对字符串中的NULL字符不起作用(例如:ShortArrayToString, StringInit, StringFill)"。#(未在MT5(build 2059)中修复)"StringSetLength函数只用于 "修剪 "字符串的长度,而不是增加它。#(固定在MT5(build 2057))"策略测试器:750个 "metatester64.exe "进程正在运行"。#"论坛www.mql5.com,当编辑带有图片的信息时,之前的图片不会被替换成新的"。 建议。#"允许用户强制生成/删除默认赋值运算符(复制构造器)的代码"。#"允许ArrayCopy复制类和 "复杂 "结构,类似于结构为任何对象类型提供深度复制功能的方式"。#"在使用动态数组时为用户提供读取/设置容量值的功能"。#"为改善信号服务的信息图而做出的改变" Errors, bugs, questions Ilya Baranov 2019.05.24 22:44 #24724 今天在我的终端上,我的真实 期货市场账户(经纪人Otkritie)的tick历史没有被上传。 票据中的数据在变化。 现在是2019年5月24日23:40 该终端的最后一次打勾是在2019年5月23日。 其他一些工具的情况也一样,包括我自己交易的工具。 在第二个终端上(单独设置),在同一个经纪人的另一个账户上,效果是一样的。 Игорь Евдокимов 2019.05.24 23:36 #24725 你能分辨出专家是在优化模式 还是在单一测试模式 下工作吗? Sergey Dzyublik 2019.05.24 23:57 #24726 MT5 (build 2059) 当向模板函数传递(void*)(NULL)参数时出现编译错误。class C{ public: template<typename T> static void func(T ){ Print(__FUNCSIG__); } }; void OnStart(){ void* c_ptr = new C(); C::func((C*)NULL); // Ok C::func(c_ptr); // Ok C::func((void*)NULL); // 'void' - illegal use of 'void' type delete c_ptr; } 在(build 2057)中一切都在工作,也许在修复过程中有些东西被搞砸了。# 和#"对模板类和 "复杂 "结构执行类型转换 "itself "时发生编译错误"。 Sergey Dzyublik 2019.05.25 00:09 #24727 也许通过与C++的类比,引入一个 "完全成熟的 "nullptr指针是有意义的? A100 2019.05.25 01:57 #24728 早在Build 2056时,一切都运作良好。但在2059年,它已经出现了编译错误。 void OnStart() { class A {}; //#define void A //(*) const void *p1; void *p2 = (void *)p1; //Error: 'void' - class type expected } 而如果我们用A(*)代替void,则一切正常。这有什么区别呢? 此外,即使在这种情况下也会发生编译错误。 void *p2 = (void *)p1; //Error: 'void' - class type expected A100 2019.05.25 02:01 #24729 当在命令构建中编译时,2059x32抽象错误。 但没有通过IDE重现--可能是一个意外 fxsaber 2019.05.25 08:20 #24730 A100:你如何在使用模板和void*之间做出选择? 1...246624672468246924702471247224732474247524762477247824792480...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
目前,不可能使用在模板类中声明的静态变量。
随着名称空间的引入,这种限制是否可以被绕过?
是的,你可以。
代码将略有不同,更加正确,这里是一个例子。
结果。
是否有可能获得具有命名空间支持的MT的alpha权限?
真的需要作为研究的一部分,能够编写一个 "智能容器",而不是寻找错误/漏洞等等。
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
Sergey Dzyublik, 2019.05.23 13:52
我一直在与我的经纪人合作,我已经发现了MT中的十几个错误和 "特殊性"。
如何知道是否值得等待它们被修复?
请不要建议每次新版本出来时都测试所有东西。
#(在MT5(build 2059)中没有修复)"当向模板函数传递(void*)(NULL)参数时出现编译错误"。
#(在MT5(build 2059)中修复)"策略测试员:计划2次通过,但实际上由于 "OnInit critical error "错误,通过次数无限>900pc"。
#(未在MT5(build 2059)中修复)"对于具有动态数组的结构,默认赋值运算符中的数组大小字段数值无效"。
#(未在MT5(build 2059)中修复)"当从一个函数中按值返回一个类对象时,编译器没有看到默认的类复制构造器"。
#(fix in MT5(build 2059))"编译器无法看到模式类和 "复杂 "结构 "本身 "的类型转换"。
#(未在MT5(build 2059)中修复)"当使用typedef时,使用具有明确专业化的模板函数不会为该模板函数生成代码。
#(未在MT5(build 2059)中修复)"在typedef中重复使用相同的函数签名时出现编译错误"。
#(未在MT5(build 2059)中修复)"很大一部分处理字符串的函数对字符串中的NULL字符不起作用(例如:ShortArrayToString, StringInit, StringFill)"。
#(未在MT5(build 2059)中修复)"StringSetLength函数只用于 "修剪 "字符串的长度,而不是增加它。
#(固定在MT5(build 2057))"策略测试器:750个 "metatester64.exe "进程正在运行"。
#"论坛www.mql5.com,当编辑带有图片的信息时,之前的图片不会被替换成新的"。
建议。
#"允许用户强制生成/删除默认赋值运算符(复制构造器)的代码"。
#"允许ArrayCopy复制类和 "复杂 "结构,类似于结构为任何对象类型提供深度复制功能的方式"。
#"在使用动态数组时为用户提供读取/设置容量值的功能"。
#"为改善信号服务的信息图而做出的改变"
今天在我的终端上,我的真实 期货市场账户(经纪人Otkritie)的tick历史没有被上传。
票据中的数据在变化。
现在是2019年5月24日23:40
该终端的最后一次打勾是在2019年5月23日。
其他一些工具的情况也一样,包括我自己交易的工具。
在第二个终端上(单独设置),在同一个经纪人的另一个账户上,效果是一样的。
当向模板函数传递(void*)(NULL)参数时出现编译错误。
在(build 2057)中一切都在工作,也许在修复过程中有些东西被搞砸了。
# 和#"对模板类和 "复杂 "结构执行类型转换 "itself "时发生编译错误"。
早在Build 2056时,一切都运作良好。但在2059年,它已经出现了编译错误。
而如果我们用A(*)代替void,则一切正常。这有什么区别呢?
此外,即使在这种情况下也会发生编译错误。
当在命令构建中编译时,2059x32抽象错误。
但没有通过IDE重现--可能是一个意外
你如何在使用模板和void*之间做出选择?