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

 

템플릿을 개선해야 합니다(구현은 클래스 A {} 이상으로 이동됨).

 template < typename T>
class A { public :
template < typename T2>
         void f1( T2 t2 );
template < typename T2>
         void f2( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); }
template < typename T2>
         void f3( T2 t2, T tt );
        T t;
};
template < typename T>
template < typename T2>
void A::f1( T2 t2 )       { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //нормально
template < typename T>
template < typename T2>
void A::f3( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } // error: 'T' - declaration without type

클래스 A {} 외부에서 A::f3을 구현할 수 없습니다.

당신은 말할 것입니다 - 그러나 그 클래스 A {} 안에서 - 당신은 할 수 있습니다. 예, 할 수 있습니다... f2()를 좋아합니다. 하지만 불편한 점은 목표가 클래스 A {}에서 부피가 큰 함수를 옮기는 것입니다. 그리고 중요한 것은 A::f1() 클래스 A {}에 대해 제거할 수 있고 모든 것이 작동하지만 A::f3()은 수행할 수 없다는 것입니다. 컴파일러는 오류를 생성하지만 A::f1() A에서 A::f1() ::f3()은 근본적으로 다릅니다.

 
아니요, 이것은 일종의 주석입니다. 그런데 이론적으로 typedef가 문제를 해결할 것입니다.
 
A100 :

템플릿을 개선해야 합니다(구현은 클래스 A {} 이상으로 이동됨).

클래스 A {} 외부에서 A::f3을 구현할 수 없습니다.

당신은 말할 것입니다 - 그러나 그 클래스 A {} 안에서 - 당신은 할 수 있습니다. 예, 할 수 있습니다... f2()를 좋아합니다. 하지만 불편한 점은 목표가 클래스 A {}에서 부피가 큰 함수를 옮기는 것입니다. 그리고 중요한 것은 A::f1() 클래스 A {}에 대해 제거할 수 있고 모든 것이 작동하지만 A::f3()은 수행할 수 없다는 것입니다. 컴파일러는 오류를 생성하지만 A::f1() A에서 A::f1() ::f3()은 근본적으로 다릅니다.

이것이 규칙이 컴파일되는 방식입니다.

 template < typename T>
class A { public :
template < typename T2>
         void f1( T2 t2 );
template < typename T2, typename T>
         void f2( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); }
template < typename T2, typename T>
         void f3( T2 t2, T tt );
        T t;
};
template < typename T2>
void A::f1( T2 t2 )       { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //?????????
template < typename T2, typename T>
void A::f3( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //error: 'T' - declaration without type

그리고 f1과 f3은 약간 다릅니다.

 
Andrey Barinov :

이것이 규칙이 컴파일되는 방식입니다.

표준이 아님 - 컴파일러가 OnStart 가 없다고 결정했습니다. - 문제 없습니다.

추가하다

 void OnStart ()
{
        A< long > a;
}
 

컴파일러 오류 : 내부 오류 #9

파일:
Test114.mq5  3 kb
 

몇 줄을 변경하면 오류가 다음과 같이 변경됩니다. 트리 최적화 오류

그리고 처음에 (단순화 전) 오류는 다음과 같습니다. 코드 생성 오류

그리고 모든 것이 거기서 끝납니다. 그리고 그 전에는 모든 것이 잘 작동했습니다.

파일:
Test115.mq5  3 kb
 
A100 :

하나의 아카이브에서 다양한 씬 소스를 만드십시오. 개발자가 다음 버그 빌드를 출시하기 전에 사용할 수 있도록 합니다.

아카이브 이름을 "이가 있는지 확인"합니다. 물론 다양한 유형의 컴파일러에 대한 이러한 테스트 옵션이 있습니다.

 
컴파일 오류: 코드 생성 오류
파일:
Test116.mq5  2 kb
 


기준 값의 잘못된 계산으로 인해 최적화 그래프 그리기 가 중지됩니다. 때문에 고쳐주세요. 차트에서 최적화 진행 상황을 시각적으로 관찰하는 것이 매우 편리합니다.

저울 + 최대 RF 기준에만 나타납니다. // 적어도 (지금까지는 작은) 연습에서는.

// 그래프만 깨지면 최적화가 성공적으로 계속됩니다.

-----------업데이트

Проявляется только на критерии Balance + max RF.

틀렸어.


 

& 및 GetPointer 의 다른 동작

 class A {};
class B {
        A *f() const { return GetPointer ( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};