Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
class A { protected:
int a;
};
class B : public A {
int a;
void f1() { this.a = 0; } //нормальноvoid f2() { this.A::a = 0; } //Error: '::' - syntax error
};
你需要能够跟踪所有图表的属性变化,而不仅仅是放置MQL程序的那个图表。
通过计时器做一个拐杖。
通过计时器做一个拐杖。
我不想做一个拐杖。MQ开发者可以扩大可能性。
关于交易、自动交易系统和策略测试的论坛
虫子,虫子,问题
Anatoli Kazharski, 2018.08.20 08:11
我希望能够跟踪所有图表的属性变化,而不仅仅是放置MQL-程序的那个图表。
现在,CHARTEVENT_CHART_CHANGE 事件不包含任何其他参数。
活动
参数值id
参数值 lparam
参数值 dparam
参数值sparam
改变图表尺寸或通过属性对话框改变图表属性的事件
变化的事件_图表
-
-
-
//---
为了跟踪其他开放图表上的这一事件,可以通过指定所需图表的ID来启用监控。
例如,像这样。
因为lparam-parameter 可以是对其进行修改的图表的标识符。sparam参数 可以是符号的名称。
执行过程中出错。
结果:预期的。
A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:错误:4007
否则。
很好。有什么区别?为什么阵列大小突然变成753790660(而不是1),结果内存突然用完了(4007)?MT5\1881\32
此外...如果你在第一种情况下删除类中的三个字符,结果也是可以的。
谢谢你的留言。
固定的。
为了在当前的构建中工作,在声明方法时不要指定类scop。
其他的错误报告与此有关,在修复后将不会再出现。
帮助中的例子不起作用。
https://www.mql5.com/ru/docs/basis/function/operationoverload
从字面上看,该页最下面的例子不起作用。
Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.
编译器写道。
不能返回'CMatrix'的对象,拷贝构造函数'CMatrix::CMatrix(const CMatrix &)'没有找到 tst.mq5 244 14
不能返回'CMatrix'的对象,拷贝构造函数'CMatrix::CMatrix(const CMatrix &)'未找到 tst.mq5 261 11
不能返回'CMatrix'的对象,拷贝构造函数'CMatrix::CMatrix(const CMatrix &)'没有找到 tst.mq5 281 14
不能返回'CMatrix'的对象,拷贝构造函数'CMatrix::CMatrix(const CMatrix &)'没有找到 tst.mq5 303 11
4个错误(s), 0个警告(s) 5 1
编译错误(ME/1881/32)。
就这样。
很好。这有什么区别呢?这不是原因。
这在阅读代码时有很大帮助,有助于避免某些情况下的错误。请注意,在MQL中,这并不是在任何地方都适用。
在C++中,它的编译是没有错误的
请注意,在MQL中,这并不是在任何地方都适用。
在C++中编译没有错误
C++有一个变态的诀窍。也许在宏中的某个地方可以使用这个,但不是直接使用。
也许可以在宏中的某个地方使用这个,但不能直接使用。
宏与此完全没有关系--用一个普通的指针代替它,你的语法就完全一样了。
在MQL中,你不能明确地引用b.A::x,而在C++中你可以。为什么有这样的限制?宏与此完全无关--用一个普通的指针代替它,你的语法完全相同。
在这种情况下,它是合理的。这个的变体--不清楚为什么要这样写。当A::已经说明了一切。