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

 
Zeleniy :

최적화가 작동하지 않습니다.

2014.08.05 19:34:42 테스터 최적화된 매개변수가 선택되지 않았습니다. 최적화할 입력을 확인하고 신중하게 시작, 단계 및 중지 값을 설정하십시오.

번역은 아무것도 하지 않았습니다.

어떻게 "아무것도"입니까? 번역은 최적화를 위해 하나 이상의 매개변수를 선택하고 시작, 종료 및 테스트 단계가 올바르게 설정되었는지 확인하는 것과 같은 것을 제공해야 합니다.
 
marketeer :
어떻게 "아무것도"입니까? 번역은 최적화를 위해 하나 이상의 매개변수를 선택하고 시작, 종료 및 테스트 단계가 올바르게 설정되었는지 확인하는 것과 같은 것을 제공해야 합니다.
이상한 방법으로 그는 단순히 내가 아무것도 이해하지 못했다고 번역했습니다. 아마도 피곤했을 수도 있고 여전히 오류로 이틀 동안 고통 받고 있습니다. 감사합니다 말씀에 의지하겠습니다.
 

그런 문제에 직면했습니다. 같은 클래스의 두 객체를 비교할 필요가 있으므로 편의상 == 연산자를 오버로드하기로 결정했습니다. 개체가 동적이면 내 명령문이 실행되지 않고 개체 자체 대신 포인터가 비교되는 것으로 나타났습니다. 글쎄, 이것은 원칙적으로 논리적이며 포인터에 의한 객체 자체로의 전환 작업이 필요합니다. *a == *b. 그러나 MQL에서는 그러한 기회를 만드는 것을 잊었습니다. 추가해야 합니다.

class T {    int x;

public :

T ( int value) { x=value; }    bool operator ==(T& other) { Print ( "compare1" );   return x==other.x; }    bool operator ==(T* other) { Print ( "compare2" );   return x==other.x; } }; //------------------ void OnStart () {   T* a= new T( 10 );   T* b= new T( 10 );       Alert (a==b);       delete a;    delete b; }

 

지금 생각해보니 여기에서 객체 자체가 아닌 포인터를 비교하는 것은 언어의 특성을 고려할 때 근본적으로 잘못된 것입니다. 결국 MQL은 관리되는 언어이며 여기에서는 개체가 메모리에 있는 방법과 액세스하는 방법에 관계없이 "개체"라는 개념이 사용됩니다. 어쨌든 멤버 및 메서드에 대한 액세스는 점을 통해 이루어집니다. 저것들. 모든 것은 C#에서와 동일합니다. 따라서 비교 연산자는 정적으로 할당된 개체와 동적 개체 모두에 대해 동일하게 작동해야 합니다. 포인터를 비교해야 하는 경우 GetPointer() 를 사용하여 수행해야 합니다.

 
meat :

지금 생각해보니 여기에서 객체 자체가 아닌 포인터를 비교하는 것은 언어의 특성을 고려할 때 근본적으로 잘못된 것입니다.

다른 수단으로 처리할 수 있는 한 MQL에서 C++와 모순되는 비교 규칙을 만들 필요가 없습니다. 포인터가 있고 객체를 비교해야 하는 경우 - 비교 기능을 사용하십시오.
 bool Compare( const T& t1, const T& t2 ) { return ( t1 == t2 ); }

Alert( Compare( a, b ));
형식의 레코드를 허용하는 것과(*a == *b) 레코드에 다른 의미를 부여하는 것과 완전히 다른 것(a == b)
 

Advisor를 테스트 할 때 오류가 발생합니다.

OrderSend 기능에 대한 잘못된 이익 창출

주문 보내기 오류 4107

어드바이저 코드에 들어가지 않고 어떻게 고칠 수 있습니까?

 
A100 :
다른 수단을 사용할 수 있는 한 MQL에서 C++와 모순되는 비교 규칙을 만들 필요가 없습니다. 포인터가 있고 객체를 비교해야 하는 경우 비교 기능을 사용하십시오. (*a == *b)와 같은 표기법을 허용하는 것과 표기법에 다른 의미를 부여하는 것은 (a == 비)

그래서 저는 MQL 규칙이 이미 C++와 모순된다고 설명합니다. 여기서 포인터로 객체에 접근하는 것은 점을 통해 수행되지만 C++의 규칙을 따르면 ->를 통해 이루어져야 합니다.

저것들. C++에서 "포인터"와 "객체"는 완전히 다른 두 개념이므로 구문이 다릅니다. 모든 것이 엄격합니다. 그리고 여기에 모든 것이 함께 섞여 있습니다. 포인터의 속성과 메서드에 액세스하는 것처럼 보입니다. 나는 그것이 나쁘다고 말하는 것이 아니다. 이것은 OOP에 더 편리하며 예를 들어 C#에서도 수행됩니다. 그러나 다른 모든 것을 같은 맥락에서 구현해야 합니다. 하나의 개념이 있어야 합니다. 그렇지 않으면 모순과 혼란이 발생합니다. 어떤 경우에는 객체 자체와 같은 방식으로 포인터를 사용하고 다른 경우에는 포인터가 갑자기 자신의 생명으로 살아납니다.

이 모든 것의 실용적인 측면으로 가면 이미 문제에 직면해야 했습니다. 코드는 정적 개체를 사용했습니다. 그런 다음 나는 그들 중 일부를 동적 인 것으로 교체하기로 결정했습니다. 결과적으로 비교 및 할당 작업이 완전히 다르게 작동하기 시작했습니다. 그리고 이 문제는 식별하기 어려웠습니다. 프로그램은 계속해서 정상적으로 컴파일되고 실행되지만 정상적으로 실행되지 않습니다.

 

내 코드에 개체가 포함된 클래스가 있습니다.

CClass
{
  ...
  CObj  Object; 
  ...
};

CObj 클래스는 이 전에 선언됩니다.

컴파일을 시도할 때 오류가 발생합니다. 'Object' - 설정을 해제할 수 없습니다.

이 오류는 무엇을 의미하며 그 이유는 무엇입니까? 전에 이 오류를 본 기억이 없습니다. CObj 클래스에는 생성자와 소멸자가 있습니다.

Object를 변수 로 선언하려고 했습니다. 모든 것이 정상입니다. 그러나 수업의 일부로 - 원하지 않습니다.

 
그래서 누군가 이 오류가 무엇인지 설명할 수 있습니까("- 설정 해제할 수 없음")? 어떤 경우에 발생합니까?
 
meat :
그래서 누군가 이 오류가 무엇인지 설명할 수 있습니까("- 설정 해제할 수 없음")? 어떤 경우에 발생합니까?
이 개체에 대해 ZeroMemory 기능 을 사용할 수 없습니다.