错误、漏洞、问题 - 页 2258

 
Anatoli Kazharski:

你需要能够跟踪所有图表的属性变化,而不仅仅是放置MQL程序的那个图表。

通过计时器做一个拐杖。

 
fxsaber:

通过计时器做一个拐杖。

我不想做一个拐杖。MQ开发者可以扩大可能性。

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

Anatoli Kazharski, 2018.08.20 08:11

我希望能够跟踪所有图表的属性变化,而不仅仅是放置MQL-程序的那个图表。

现在,CHARTEVENT_CHART_CHANGE 事件不包含任何其他参数。

活动

参数值id

参数值 lparam

参数值 dparam

参数值sparam

改变图表尺寸或通过属性对话框改变图表属性的事件

变化的事件_图表

-

-

-

//---

为了跟踪其他开放图表上的这一事件,可以通过指定所需图表的ID来启用监控。

例如,像这样。

ChartSetInteger(chart_id,CHART_EVENT_CHART_CHANGE,true);
//---


因为lparam-parameter 可以是对其进行修改的图表的标识符。sparam参数 可以是符号的名称。

 
A100:

执行过程中出错。

结果:预期的。

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




Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

编译错误(ME/1881/32)。

template<typename T>
class B;
template<typename T>
class A {
        B<int> *f() { return NULL; }
};
template<typename T>
class B : public A<T> {}; //Error: 'A' - struct undefined
void OnStart()
{
        A<int> *a;
        B<int> *b;
}

就这样。

void OnStart()
{
        B<int> *b;
        A<int> *a;
}
很好。这有什么区别呢?
 
fxsaber:

这不是原因。

这在阅读代码时有很大帮助,有助于避免某些情况下的错误。

请注意,在MQL中,这并不是在任何地方都适用。

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
};

在C++中,它的编译是没有错误的

 
A100:

请注意,在MQL中,这并不是在任何地方都适用。

在C++中编译没有错误

C++有一个变态的诀窍。也许在宏中的某个地方可以使用这个,但不是直接使用。

 
在右上角,我一直看到一个图标,说我有未读PM。没有办法重置它--它被读取了。请增加一个 "让所有的人都读 "的按钮。
 
fxsaber:

也许可以在宏中的某个地方使用这个,但不能直接使用。

宏与此完全没有关系--用一个普通的指针代替它,你的语法就完全一样了。

struct A {
        int x;
};
struct B : A {
        int x;
};
void OnStart()
{
        B b;
        b.A::x = 1; //Error: '::' - syntax error
}
在MQL中,你不能明确地引用b.A::x,而在C++中你可以。为什么有这样的限制?
 
A100:

宏与此完全无关--用一个普通的指针代替它,你的语法完全相同。

在这种情况下,它是合理的。这个的变体--不清楚为什么要这样写。当A::已经说明了一切。