오류, 버그, 질문 - 페이지 2258

 
Anatoli Kazharski :

MQL 프로그램이 있는 차트뿐만 아니라 모든 차트의 속성 변경을 추적할 수 있는 기능이 필요합니다.

타이머로 목발 만들기.

 
fxsaber :

타이머로 목발 만들기.

목발을 만들고 싶지 않습니다. MQ 개발자는 가능성을 확장할 수 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

아나톨리 카자르스키 , 2018.08.20 08:11

MQL 프로그램이 있는 차트뿐만 아니라 모든 차트의 속성 변경을 추적할 수 있는 기능이 필요합니다.

이제 CHARTEVENT_CHART_CHANGE 이벤트에는 다른 매개변수가 포함되지 않습니다.

이벤트

id 매개변수 값

lparam 매개변수 값

dparam 매개변수의 값

스팸 매개변수 값

속성 대화 상자를 통해 차트 크기를 변경하거나 차트 속성을 변경하는 이벤트

CHARTEVENT_CHART_CHANGE

//---

다른 열린 차트에서 이 이벤트를 추적하려면 원하는 차트의 식별자를 지정하여 모니터링을 활성화할 수 있습니다.

예를 들면 다음과 같습니다.

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


lparam 매개변수는 변경이 이루어진 차트의 식별자일 수 있습니다. Sparam 매개변수로서 기호의 이름입니다.

 
A100 :

실행 중 오류:

결과: 예상:

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:오류:4007

그래서:

좋아. 차이점이 뭐야? 어레이 크기가 갑자기 1이 아닌 753790660이 되어 메모리가 갑자기 종료된 이유(4007)는 무엇입니까? MT5\1881\32

게다가... 첫 번째 변형에서 클래스에서 문자 그대로 세 문자를 삭제하면 결과도 정상이 됩니다.

메시지 주셔서 감사합니다.

수정했습니다.


현재 빌드에서 작업하려면 해당 메서드를 선언할 때 클래스의 범위를 지정하지 마십시오.


다른 버그 보고서는 이 보고서와 관련이 있으며 수정 후 재생되지 않습니다.

 

도움말의 예가 작동하지 않습니다.

https://www.mql5.com/ru/docs/basis/function/operationoverload

페이지 맨 아래에 있는 예제는 다음과 같이 작동하지 않습니다.

Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.

컴파일러는 다음과 같이 씁니다.

'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다. tst.mq5 244 십사

'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다. tst.mq5 261 열하나

'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다. tst.mq5 281 십사

'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다. tst.mq5 303 열하나

4개의 오류, 0개의 경고 5 하나




Документация по 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에서는 bA::x를 명시적으로 참조할 수 없지만 C++에서는 가능합니다. 왜 그런 제한이 있습니까?
 
A100 :

매크로는 그것과 전혀 관련이 없습니다 - 이것을 일반 포인터로 바꾸면 구문은 정확히 동일할 것입니다:

이 경우 정당합니다. 이것의 변형 - 왜 그렇게 쓰는지 명확하지 않습니다. A::가 이미 모든 것에 대해 이야기할 때.