class A {
public:
booloperator !() { return ( true ); }
booloperator +() { return ( true ); }
};
int g( A& a ) { return ( 10 ); }
int g( int ) { return ( 20 ); }
voidOnStart()
{
A *a = new A;
Print( !a ); //здесь считает 'a' - числом ???
Print( a.operator!() ); //здесь не считает (что правильно) 'a' - числомPrint( g( a ) ); //здесь не считает (что правильно) 'a' - числом, хотя есть g( int ) и нет g( A* )
}
在MQL4的标准 库中存在错误,特别是在指标类中。
对于CiATR 类,缺少GetData方法的主体。
对于使用ENUM_APPLIED_VOLUME类型参数的指标(CiForce,CiOBV)有一个错误:不能使用不适当的枚举器。
顺便说一下,ENUM_APPLIED_VOLUME似乎是一个标准的枚举;它出现在MQL4文档中,但事实上它是不存在的('ENUM_APPLIED_VOLUME' - 未声明的标识符)。
因此,请检查你所有的图书馆。我感觉它们是从MT5匆忙移植过来的,甚至没有检查它们的功能。
编译错误,构建966
构建932是好的取决于评论的内容
没问题
注释永远不会被替换--编译器只是忽略它们,否则#define在大多数情况下根本无法与注释一起使用//
在任何情况下,在https://www.mql5.com/ru/forum/1111/page1190#comment_993854,用/**/代替//。结果是一样的 - 编译错误。
请解释以下情况。我有一个多货币指标,它的值不会因为它连接在什么图表上而改变--它为指定的工具计算值,与当前窗口无关。我在这个指标上手动画出支撑线和阻力线。现在的诀窍是:如果我从市场概览中拖动另一个工具到窗口,指标的外观保持不变,线条消失。如果你打开 "对象列表"对话框,那些对象仍然被列在那里。端点值(日期和数值)保持不变(即应该在相同的地方可见)--这是可以理解的,没有人改变它们。然而,这些线条是不可见的。如果你再把原来的工具拖到窗口上,线条又变得可见了。问题是什么?
发现并纠正了。
谢谢你与我联系。结果发现是一个通用的错误--以前一直是这样工作的。
你不能应用缩写运算符!() -编译错误
如果编译器理解(它确实理解)f4( a )意味着'a'是一个对象,而不是一个作为数字的指针/标点)。
它还应该理解!'a'对'a'的意思是一样的(对象,不是指针/数字)。
换句话说,如果
a1.f()和a2.f()的意思是一样的,无论a1、a2是指针还是对象,运算符!()怎么会差?我应该补充的是,例如,用operator+()没有编译错误,如果我们简单地在上面的第一个例子中加入根本不使用的operator+(),也不会有编译错误。
但在这种情况下,会出现另一种不确定性