错误、漏洞、问题 - 页 2271 1...226422652266226722682269227022712272227322742275227622772278...3184 新评论 Georgiy Merts 2018.09.02 10:35 #22701 A100: 一个编译错误。1)(2)和(3)(4)之间的根本区别是什么?如果你在函数之外声明类(3)(4)--不会发生错误。如果你在一个函数内声明,会发生错误。 Artyom Trishkin 2018.09.02 10:43 #22702 Vladimir Pastushak:以下行为可能与什么有关 编译指标工作正常,再次编译指标不能正常工作。它在测试器中是否正常工作?哪个指标? A100 2018.09.02 15:36 #22703 fxsaber: C++在这里产生了什么? 为了使它在MQL5中工作,你需要在输出端有两个不同的字符串,而不是同一个。但这样一来,签名的形成机制应该是绝对不同的。如果C++ 在打印时产生相同的结果 ,__FUNCSIG__的成本将大幅下降。结果:C++ void f<g1::A>( g1::A& ) void f<g2::A>( g2::A& ) 正如你所看到的,字符串是不同的...使用的是函数签名 fxsaber 2018.09.02 15:57 #22704 A100:结果:C++ void f<g1::A>( g1::A& ) void f<g2::A>( g2::A& ) 正如你所看到的,字符串是不同的...使用的是函数签名MQL5给出了 void f<A>(A&)也就是说,函数里面没有类的签名。有一天会得到支持。 而如果类是全局的,C++会产生哪一行? void f<::A>( ::A& ) 空白f<A>( A& ) A100 2018.09.02 16:26 #22705 fxsaber:MQL5给出了 也就是说,函数里面没有类的签名。有一天会得到支持。如果过时的C++编译器不支持它,它们已经在源代码 的第一行(1)给出了一个错误。这就是为什么问题首先是以这种方式提出的:为什么在一种情况下有错误,而在另一种情况下有正常的错误? 我们期望在这两种情况下有相同的行为:要么出错,要么没有错误。而错误不在于缺乏支持本身,而在于在其他平等条件下的不平等行为(如这个例子)。 A100 2018.09.02 16:27 #22706 fxsaber: 而如果类是全局的,C++会产生哪一行?void f<::A>( ::A& ) 空白f<A>( A& )第二种变体 fxsaber 2018.09.02 17:39 #22707 A100:如果过时的C++编译器不支持这一点,它们已经在源代码 的第一行(1)给出了一个错误。这就是为什么问题首先是以这种方式提出的:为什么在一种情况下有错误,而在另一种情况下有正常的错误? 我们期望在这两种情况下有相同的行为:要么出错,要么没有错误。而错误不在于缺乏支持本身,而在于不平等的行为,其他方面都一样(如这个例子)。嗯,这很容易解释。编译器从上到下穿过代码,在前进过程中形成相应的签名。第一个签名的创建没有任何问题。到了第二个,已经有了这样一个签名。这里我们在第二行有一个错误。 A100 2018.09.02 17:42 #22708 Georgiy Merts:如果你在函数之外声明类(3)(4),不会发生错误。如果你在一个函数内声明,会发生错误。 如果在最初的例子 中 class A2 { int i; }; //(3) 换成 interface A2 {}; //(5) 如果你在一个函数内声明,也不会发生错误......根本的区别是什么? A100 2018.09.02 21:24 #22709 fxsaber:所以这是可以理解的。编译器从代码的顶部到底部,在前进过程中形成适当的签名。它创建了第一个签名,没有任何问题。它到了第二个,已经有一个了。因此,第二行有一个错误。那么,为什么它在MQL中编译时没有错误? template<typename T> void f() { Print(__FUNCSIG__); } void g1() { class A { int x; } a; f<A>(); } void g2() { class A { double x; } a; f<A>(); } void OnStart() { g1(); g2(); } 结果: MQL C++空白f<A>() void f<g1::A>() 空白f<A>() void f<g2::A>() 为什么签名是在这里创造的,没有任何干扰? fxsaber 2018.09.02 22:07 #22710 A100:那么,为什么它在MQL中编译时没有错误? 结果: MQL C++空白f<A>() void f<g1::A>() 空白f<A>() void f<g2::A>() 为什么签名是在这里创造的,没有任何干扰? 一个人只被创造。此外,在f中你不能使用T。总之,情况对我来说是很明显的。 1...226422652266226722682269227022712272227322742275227622772278...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
一个编译错误。
1)(2)和(3)(4)之间的根本区别是什么?
如果你在函数之外声明类(3)(4)--不会发生错误。如果你在一个函数内声明,会发生错误。
以下行为可能与什么有关
编译指标工作正常,再次编译指标不能正常工作。它在测试器中是否正常工作?
哪个指标?
C++在这里产生了什么?
为了使它在MQL5中工作,你需要在输出端有两个不同的字符串,而不是同一个。但这样一来,签名的形成机制应该是绝对不同的。如果C++ 在打印时产生相同的结果 ,__FUNCSIG__的成本将大幅下降。
结果:C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
正如你所看到的,字符串是不同的...使用的是函数签名
结果:C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
正如你所看到的,字符串是不同的...使用的是函数签名
MQL5给出了
void f<A>(A&)
也就是说,函数里面没有类的签名。有一天会得到支持。
而如果类是全局的,C++会产生哪一行?
void f<::A>( ::A& )
空白f<A>( A& )
MQL5给出了
也就是说,函数里面没有类的签名。有一天会得到支持。
如果过时的C++编译器不支持它,它们已经在源代码 的第一行(1)给出了一个错误。这就是为什么问题首先是以这种方式提出的:为什么在一种情况下有错误,而在另一种情况下有正常的错误?
我们期望在这两种情况下有相同的行为:要么出错,要么没有错误。而错误不在于缺乏支持本身,而在于在其他平等条件下的不平等行为(如这个例子)。
而如果类是全局的,C++会产生哪一行?
void f<::A>( ::A& )
空白f<A>( A& )
第二种变体
如果过时的C++编译器不支持这一点,它们已经在源代码 的第一行(1)给出了一个错误。这就是为什么问题首先是以这种方式提出的:为什么在一种情况下有错误,而在另一种情况下有正常的错误?
我们期望在这两种情况下有相同的行为:要么出错,要么没有错误。而错误不在于缺乏支持本身,而在于不平等的行为,其他方面都一样(如这个例子)。
嗯,这很容易解释。编译器从上到下穿过代码,在前进过程中形成相应的签名。第一个签名的创建没有任何问题。到了第二个,已经有了这样一个签名。这里我们在第二行有一个错误。
如果你在函数之外声明类(3)(4),不会发生错误。如果你在一个函数内声明,会发生错误。
换成
如果你在一个函数内声明,也不会发生错误......根本的区别是什么?
所以这是可以理解的。编译器从代码的顶部到底部,在前进过程中形成适当的签名。它创建了第一个签名,没有任何问题。它到了第二个,已经有一个了。因此,第二行有一个错误。
那么,为什么它在MQL中编译时没有错误?
结果: MQL C++
空白f<A>() void f<g1::A>()
空白f<A>() void f<g2::A>()
为什么签名是在这里创造的,没有任何干扰?
那么,为什么它在MQL中编译时没有错误?
结果: MQL C++
空白f<A>() void f<g1::A>()
空白f<A>() void f<g2::A>()
为什么签名是在这里创造的,没有任何干扰?
一个人只被创造。此外,在f中你不能使用T。总之,情况对我来说是很明显的。