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

 
A100 :
컴파일 중 오류:

그리고 (1)(2)와 (3)(4)의 근본적인 차이점은 무엇입니까???

함수 외부에서 클래스 (3)(4)를 선언하면 오류가 발생하지 않습니다. 함수 내에서 선언되면 발생합니다.

 
Vladimir Pastushak :

다음 동작의 원인이 될 수 있는 것

표시기를 컴파일하면 올바르게 작동하지만 다시 컴파일하면 표시기가 올바르게 작동하지 않습니다. 테스터에서 제대로 작동합니까?

어떤 지표?

 
fxsaber :

여기서 C++는 무엇을 출력 합니까?

이것이 MQL5에서 작동하려면 동일한 것이 아니라 두 개의 다른 출력 문자열이 있어야 합니다. 그러나 서명 형성을 위한 완전히 다른 메커니즘이 있어야 합니다. C++가 동일한 결과를 인쇄하면 __FUNCSIG__의 가격이 크게 떨어집니다.

결과: C++

무효 f<g1::A>( g1::A& )
무효 f<g2::A>( g2::A& )

보시다시피 라인이 다릅니다 ... 함수 서명이 사용됩니다

 
A100 :

결과: C++

무효 f<g1::A>( g1::A& )
무효 f<g2::A>( g2::A& )

보시다시피 라인이 다릅니다 ... 함수 서명이 사용됩니다

MQL5 문제

 void f<A>(A&)

저것들. 함수 내부에는 클래스 서명이 없습니다. 언젠가는 지원될 것입니다.


그리고 클래스가 전역적이라면 C++는 어떤 라인을 출력합니까?

무효 f<::A>( ::A& )

무효 f<A>( A& )

 
fxsaber :

MQL5 문제

저것들. 함수 내부에는 클래스 서명이 없습니다. 언젠가는 지원될 것입니다.

오래된 C++ 컴파일러가 이를 지원하지 않으면 소스 코드 의 첫 번째 줄(1)에 이미 오류가 발생합니다. 따라서 처음에 질문은 다음과 같이 제기되었습니다. 한 경우에는 오류가 있고 다른 경우에는 정상인 이유는 무엇입니까?

오류 또는 오류 없음의 두 경우 모두 동일한 동작이 예상되었습니다. 그리고 오류는 지원이 부족한 것이 아니라 불평등한 행동, 다른 모든 것이 동일하다는 것입니다( 이 예 에서와 같이)

 
fxsaber :
그리고 클래스가 전역인 경우 C++에서 출력하는 행은 무엇입니까?

무효 f<::A>( ::A& )

무효 f<A>( A& )

두 번째 옵션

 
A100 :

오래된 C++ 컴파일러가 이를 지원하지 않으면 소스 코드 의 첫 번째 줄(1)에 이미 오류가 발생합니다. 따라서 처음에 질문은 다음과 같이 제기되었습니다. 한 경우에는 오류가 있고 다른 경우에는 정상인 이유는 무엇입니까?

오류 또는 오류 없음의 두 경우 모두 동일한 동작이 예상되었습니다. 그리고 오류는 지원이 부족한 것이 아니라 불평등한 행동, 다른 모든 것이 동일하다는 것입니다( 이 예 에서와 같이)

그래서 이해할 수 있습니다. 컴파일러는 코드를 통해 위에서 아래로 이동하여 적절한 서명을 생성합니다. 문제 없이 첫 번째 서명을 만들었습니다. 그것은 두 번째에 이르고 이것은 이미 존재합니다. 다음은 두 번째 줄의 오류입니다.

 
Georgiy Merts :

함수 외부에서 클래스 (3)(4)를 선언하면 오류가 발생하지 않습니다. 함수 내에서 선언되면 발생합니다.

원래 예 에서
         class   A2 { int i; }; //(3)

~로 교체되다

         interface A2 {};      //(5)

그러면 함수 내부에 오류가 없습니다 ... 그리고 근본적인 차이점은 무엇입니까?

 
fxsaber :

그래서 이해할 수 있습니다. 컴파일러는 코드를 통해 위에서 아래로 이동하여 적절한 서명을 생성합니다. 문제 없이 첫 번째 서명을 만들었습니다. 그것은 두 번째에 이르고 이것은 이미 존재합니다. 다음은 두 번째 줄의 오류입니다.

그리고 오류 없이 MQL로 컴파일되는 이유는 무엇입니까?

 template < typename T>
void f() { Print ( __FUNCSIG__ ); }
void g1() { class A { int     x; } a; f<A>(); }
void g2() { class A { double x; } a; f<A>(); }
void OnStart ()
{
        g1();
        g2();
}

결과: MQL C++

무효 f<A>() 무효 f<g1::A>()
무효 f<A>() 무효 f<g2::A>()

여기서 간섭 없이 서명이 생성되는 이유는 무엇입니까?

 
A100 :

그리고 오류 없이 MQL로 컴파일되는 이유는 무엇입니까?

결과: MQL C++

무효 f<A>() 무효 f<g1::A>()
무효 f<A>() 무효 f<g2::A>()

여기서 간섭 없이 서명이 생성되는 이유는 무엇입니까?

하나는 생성 중입니다. 게다가, f에서 T를 사용할 수 없습니다. 일반적으로 상황은 나에게 분명합니다.