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

 
Ilyas :

그 이유를 대충 이해했습니다. 전역 변수 가 있습니다

CArrayObj actobjects;

환경과 미시브의 초기화 순서가 있는 무언가가 보입니다. 만약 actobjects가 포인터이고 제가 거기에 배열을 배치하면 아무 것도 떨어지지 않습니다. 전역 변수의 클래스는 잘못된 관행입니다. 물론 다시 작성하겠습니다. 그러나 함수의 정적 배열에서도 문제가 발생합니다(결국, 규칙은 µl에서 적용되지 않습니다 - 함수의 첫 번째 항목에서 초기화).

일반적으로 이것이 오류로 간주되는 경우 대략적인 이유를 알면 현지화할 수 있습니다.

 
pavlick_ :

일반적으로 이것이 오류로 간주되는 경우 대략적인 이유를 알면 현지화할 수 있습니다.

아니, 잡을 수가 없어, 코드를 잘라낸 후 기적적으로 사라진다. 일부 라인의 주석 처리(가을 때까지 실행되지 않음)도 영향을 미칩니다.

 

mqh에 긴 코드 클래스가 있습니다. 원래 클래스와 두 줄만 다른 정확히 동일한 클래스를 생성해야 합니다(보다 작음 기호 대신 보다 큼 기호가 있어야 함).

거의 동일한 다른 mqh를 생성하지 않고 이 작업을 수행할 수 있습니까?


클래스가 짧으면 여러 줄 매크로로 쉽게 만들 수 있으며 모든 것이 간단합니다. 하지만 여기 코드가 깁니다.

mqh 클론을 만들고 싶지 않습니다. 왜냐하면 하나의 mqh를 수정하면 두 번째에서 모든 작업을 반복해야 합니다. 그리고 건망증과 부주의라는 인간적 요인이 있습니다.


템플릿 클래스를 통해 여전히 가능합니다. 그러나 이것이 실행 속도에 어떤 영향을 미칠지는 전혀 분명하지 않습니다. 빠른 실행을 위해 클래스가 필요합니다.

 
fxsaber :
#ifdef
 
TheXpert :
#ifdef

작동 안 할 것이다. 두 클래스 모두 작동 중이어야 합니다.

 
fxsaber :

작동 안 할 것이다. 두 클래스 모두 작동 중이어야 합니다.

나는 어떤 문제도 보이지 않는다.

____________

계승

차이점을 별도의 작은 클래스로 나누기

 
TheXpert :

나는 어떤 문제도 보이지 않는다.

____________

계승

차이점을 별도의 작은 클래스로 나누기

클래스에는 몇 가지 적절한 크기의 메서드가 있습니다. 각 방법에서 ">" 기호를 "<" 기호로 바꾸기만 하면 됩니다.

다음과 같이 가상을 사용할 수 있습니다.
 class A
{
private :
   virtual bool Compare()
  {
     return ( true );
  }
public :

   bool f()
  {
     return ( this .Compare());
  }
};

class B : public A
{
private :
   virtual bool Compare()
  {
     return ( false );
  }
};


void OnStart ()
{
  A a;
  B b;
  
   Print (a.f());
   Print (b.f());
}


그러나 불행히도 여전히 클래스의 초기화 값을 전달해야 합니다. 분명히 템플릿을 통해 여전히 해야 합니다.

 
fxsaber :

나는 템플릿 매개변수를 통해 일부 어댑터를 전달할 것입니다(거기에 브레이크가 없어야 함). 그러나 서투른 방식으로 원한다면 그렇게 할 수도 있습니다. 헤더 파일에 대한 하드 링크를 만드십시오(제가 틀린 것이 아니라면 mklink /H <link> <target>. 구글에서 "windows create hard link" 주제를 검색할 수 있습니다). 글쎄, 우리는 일반적인 방법으로이 경제를 켭니다

 #define _N C1    // имя класса
#define _M "c1"  // какой-то параметр
#include <qq.mqh>
#undef _N
#undef _M
#define _N C2
#define _M "c2"
#include <ee.mqh> // жёсткая ссылка на qq.mqh
#undef _N
#undef _M
 
pavlick_ :

나는 템플릿 매개변수를 통해 일부 어댑터를 전달할 것입니다(거기에 브레이크가 없어야 함). 그러나 서투른 방식으로 원한다면 그렇게 할 수도 있습니다. 헤더 파일에 대한 하드 링크를 만드십시오(제가 틀린 것이 아니라면 mklink /H <link> <target>. 구글에서 "windows create hard link" 주제를 검색할 수 있습니다). 글쎄, 우리는 일반적인 방법으로이 경제를 켭니다

질문을 이해하지 못했습니다.

 
fxsaber :

질문을 이해하지 못했습니다.

글쎄, 당신이 나를 이해했다고 확신합니까? qq.mqh 및 ee.mqh를 나열하는 경우를 대비하여(하나의 엔티티를 변경하면 다른 하나가 변경됨)

 class _N
{
public :
   void f() { Alert (_M);}
};

모든 것이 순서대로 이루어지며 클래스는 매크로에 있지 않으며 _M을 제외하고는 거의 동일합니다.