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

 
어떤 경우에 "내부 컴파일러 오류"가 발생합니까?   
일리아스 :
지금까지 알려진 두 가지 사례:
1) 연산에서 bool &=(bool 표현식)
2) 초기화 시퀀스의 추가 쉼표: val={ {...},{...} , }

새 빌드에서 이러한 버그가 수정되지 않았거나 무엇입니까? 여전히 컴파일러에서 오류가 발생합니다. 나는 1159 빌드에 남아 있어야합니다.

 
Renat Fatkhullin :
템플릿의 경우 본문을 외부로 이동하지 않고 클래스 설명 내부에 모든 메서드를 배치해야 합니다.

중요한 것은 이 요구 사항이 더 남아 있을 것이라는 점입니다. 그렇지 않으면 방금 스택 컨테이너와 대기열을 만들고 한 달 후에 클래스 템플릿이 나타났고 모든 것이 더 좋아졌을 것입니다. :)

클래스 템플릿에 대한 또 다른 질문입니다. 두 개의 템플릿 클래스가 있습니다. 클래스 중 하나는 다른 클래스를 사용합니다. 한 템플릿 클래스에서 다른 템플릿 클래스로 유형이 전송됩니까?

 
coderex :

중요한 것은 이 요구 사항이 더 남아 있을 것이라는 점입니다. 그렇지 않으면 방금 스택 컨테이너와 대기열을 만들고 한 달 후에 클래스 템플릿이 나타났고 모든 것이 더 좋아졌을 것입니다. :)

클래스 템플릿에 대한 또 다른 질문입니다. 두 개의 템플릿 클래스가 있습니다. 클래스 중 하나는 다른 클래스를 사용합니다. 한 템플릿 클래스에서 다른 템플릿 클래스로 유형이 전송됩니까?

시도 해봐.
 
Renat Fatkhullin :
시도 해봐.
시도하고 몇 가지 오류가 발생하고 다른 방법을 생각합니다 ...
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

알렉세이 나보이코프:
새 빌드에서 이러한 버그가 수정되지 않았거나 무엇입니까? 여전히 컴파일러에서 오류가 발생합니다. 나는 1159 빌드에 남아 있어야합니다.

MT4 890의 단락 2에 추가 쉼표가 있는 경우를 대비하여 확인했는데 오류 메시지 만 표시됩니다.
 

CList 를 정렬한 사람이 있습니까?

기본적으로 비교를 재정의해야 합니다.

그러나 항상 기본 클래스의 Compare가 호출됩니다. 그러나 그것은 작동하지 않습니다. 여기에서 뭔가 잘못되었다는 생각이 들어옵니다 ...

간단한 예를 만들었습니다.

 class COperation : public CObject
  {
public :
   double            number;
   COperation( double p) { number = p;}

virtual int Compare( const CObject *node, const int mode= 0 );
  };
  
 int COperation::Compare( const CObject *node, const int mode= 0 )
  {
   const COperation *ppp = node;
   
   if ( this .number > ppp.number)
     {
       return 1 ;
     }
   if ( this .number < ppp.number)
     {
       return - 1 ;
     }
   
   return 0 ;
 }   


void OnStart ()
  {
   CList *list = new CList();
   list.Add( new COperation( 3 ));
   list.Add( new COperation( 4 ));
   list.Add( new COperation( 7 ));
   list.Add( new COperation( 2 ));
   list.Add( new COperation( 3 ));
   list.Add( new COperation( 9 ));
   list.Add( new COperation( 0 ));
   list.Add( new COperation( 1 ));
   
   Print ( "After Sort" );
   COperation *node = list.GetFirstNode();
   string numbers = "" ;
   for (;node != NULL ; node = node.Next())
     {
      numbers += ( string )node.number + " " ;
     }
     Print (numbers); 
    numbers = "" ;
     
   list.Sort( 0 );
   
   Print ( "Before Sort" );
   node = list.GetFirstNode();
   for (;node != NULL ; node = node.Next())
     {
      numbers += ( string )node.number + " " ;
     }
   Print (numbers); 
   
   
   delete list;
  }
파일:
sort.mq5  3 kb
 

중첩 템플릿(MQL4)을 처리할 때 유형을 전달할 때 결함이 관찰됩니다. 이 사실을 눈치챈 사람이 있습니까?

특히 템플릿 메서드가 있는 클래스 A가 있으며, 그 안에 메서드를 초기화한 동일한 유형 T의 템플릿 생성자에 의해 다른 클래스 B의 개체가 생성됩니다. 결과적으로 이 메서드 내에서 typename은 전달된 형식(예: int)을 올바르게 정의하고 이미 B 생성자 내부에서 typename은 string과 같습니다.

SD?

 
시트를 정렬하는 가장 전통적인 방법은 시트를 배열로 추월하고 배열을 정렬한 다음 다시 추월하는 것입니다.
 

나는 끊임없이 정렬을 사용합니다. 문제가 발생하지 않습니다.

당신, sigma7i , 내가 이해하는 한 Coperation::Compare() 메서드가 잘못 재정의되고 기본 CObject::Compare() 메서드가 반환하는 잘못된 유형의 값을 반환 하고 컴파일러는 이를 별도의 것으로 받아들입니다. 가상. 결과적으로 컴파일러에 따르면 기본 메서드만 개체에서 호출되고 상속인이 없습니다.

 
sigma7i :

그러나 항상 기본 클래스의 Compare가 호출됩니다. 그러나 그것은 작동하지 않습니다. 여기에서 뭔가 잘못되었다는 생각이 들어옵니다 ...

 virtual int Compare( const CObject *node, const int mode= 0 ) const ;