Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.
컴파일러는 다음과 같이 씁니다.
'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다.tst.mq5244십사
'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다.tst.mq5261열하나
'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다.tst.mq5281십사
'CMatrix' 개체를 반환할 수 없습니다. 복사 생성자 'CMatrix::CMatrix(const CMatrix &)'를 찾을 수 없습니다.tst.mq5303열하나
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
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 개발자는 가능성을 확장할 수 있습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
아나톨리 카자르스키 , 2018.08.20 08:11
MQL 프로그램이 있는 차트뿐만 아니라 모든 차트의 속성 변경을 추적할 수 있는 기능이 필요합니다.
이제 CHARTEVENT_CHART_CHANGE 이벤트에는 다른 매개변수가 포함되지 않습니다.
이벤트
id 매개변수 값
lparam 매개변수 값
dparam 매개변수의 값
스팸 매개변수 값
속성 대화 상자를 통해 차트 크기를 변경하거나 차트 속성을 변경하는 이벤트
CHARTEVENT_CHART_CHANGE
—
—
—
//---
다른 열린 차트에서 이 이벤트를 추적하려면 원하는 차트의 식별자를 지정하여 모니터링을 활성화할 수 있습니다.
예를 들면 다음과 같습니다.
lparam 매개변수는 변경이 이루어진 차트의 식별자일 수 있습니다. Sparam 매개변수로서 기호의 이름입니다.
실행 중 오류:
결과: 예상:
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 하나
컴파일 중 오류(ME\1881\32)
그래서:
좋아. 차이점이 뭐야?이것은 이유가 아닙니다.
이것은 코드를 읽을 때 큰 도움이 되며 어떤 상황에서는 실수를 피하는 데 도움이 됩니다.MQL에서는 이것이 모든 곳에서 작동하지 않는다는 점에 주목합니다.
C++에서 오류 없이 컴파일되는 것
MQL에서는 이것이 모든 곳에서 작동하지 않는다는 점에 주목합니다.
C++에서 오류 없이 컴파일되는 것
C++는 변태에 대해 많이 알고 있습니다. 아마도 매크로의 어딘가에서 사용할 수 있지만 직접적으로는 사용할 수 없습니다.
아마도 매크로의 어딘가에서 사용할 수 있지만 직접적으로는 사용할 수 없습니다.
매크로는 그것과 전혀 관련이 없습니다 - 이것을 일반 포인터로 바꾸면 구문은 정확히 동일할 것입니다:
MQL에서는 bA::x를 명시적으로 참조할 수 없지만 C++에서는 가능합니다. 왜 그런 제한이 있습니까?매크로는 그것과 전혀 관련이 없습니다 - 이것을 일반 포인터로 바꾸면 구문은 정확히 동일할 것입니다:
이 경우 정당합니다. 이것의 변형 - 왜 그렇게 쓰는지 명확하지 않습니다. A::가 이미 모든 것에 대해 이야기할 때.