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

 
Koldun Zloy :

여기에서도 모든 것이 맞습니다.

잘못된!

VS2019에서 특별히 테스트:

 class A
    {
         private int f1() { return 1 ; }
         private int f2() { return 2 ; }
         public int   f( int v) { const int a = f1(); const int b = f2(); return (v + a + b); }
    }

실수 CS0133 "a"에 할당된 표현식은 상수 표현식이어야 합니다. 콘솔앱2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 열셋 활동적인

실수 CS0133 "b"에 할당된 표현식은 상수 표현식이어야 합니다. 콘솔앱2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 열셋 활동적인

 
Igor Makanu :

작년에 잘못 작동했습니다 - 특별히 테스트된 const 수정자

@Ilyas 는 MQL 프로그램이 시작되는 방법을 설명한 것 같습니다. 먼저 설명된 위치에 관계없이 모든 const 및 static이 초기화된 다음 클래스 생성자가 호출됩니다.

좋아, 이 정적 / const 초기화를 사용하면 - 여전히 올바르게 배포될 수 있지만 여기에는 const 수정자가 컴파일러가 이를 확인할 것을 보장하지 않는다는 사실이 있습니다. 매우 예상치 못한 - 내 두 번째 예

두 가지 예에서 모든 것이 올바르게 예상대로 작동합니다.

 
Koldun Zloy :

두 가지 예에서 모든 것이 올바르게 예상대로 작동합니다.

const 수정자는 컴파일할 때 컴파일러가 내 오류를 찾을 것이라고 99% 확신할 것으로 예상됩니다. VS2019는 이를 수행하고 MQL은 그렇지 않습니다.

 
Igor Makanu :

const 수정자는 컴파일할 때 컴파일러가 내 오류를 찾을 것이라고 99% 확신할 것으로 예상됩니다. VS2019는 이를 수행하고 MQL은 그렇지 않습니다.

정확히 무엇이 잘못되었다고 생각합니까?

VS2019에서는 오류가 발생하지 않습니다.

 
Igor Makanu :

작년에 잘못 작동했습니다 - 특별히 테스트된 const 수정자

@Ilyas 는 MQL 프로그램이 시작되는 방법을 설명한 것 같습니다. 먼저 설명된 위치에 관계없이 모든 const 및 static이 초기화된 다음 클래스 생성자가 호출됩니다.

분명히 const / static 수정자가있는 전역 변수에 관한 것이며 로컬 변수를 사용하고 있습니다.

 
Koldun Zloy :

정확히 무엇이 잘못되었다고 생각합니까?

VS2019에서는 오류가 발생하지 않습니다.

MQL 컴파일러가 모호한 표현식의 사용을 허용한다는 오류, const 수정자가 있는 경우 이는 상수입니다.

컴파일러가 동일한 코드를 추적 하지 않았 습니까? 다른 상황을 추적 했습니다.

강조 표시된 모든 것을 컴파일하기 전에 VS2019에서 바로 샤프

 class A{
public :
   int ivalue;
   int inc() const { static int v = 0 ; return (++v);}
   A():ivalue( 0 ){}
};

class B{
public :
   int ivalue;
   int inc(){ return (++ivalue);}
   B():ivalue( 0 ){}
};

//+------------------------------------------------------------------+
void OnStart ()
{
   const A a;
   Print (a.inc());  
   B b1;
   Print (b1.inc());
   const B b2;
   Print (b2.inc()); // 'inc' - call non-const method for constant object
}
//+------------------------------------------------------------------+
세르게이 주블리크 :

분명히 const / static 수정자가있는 전역 변수에 관한 것이며 로컬 변수를 사용하고 있습니다.

혼동될 수 있지만 const 수정자의 동작은 C#과 매우 다릅니다.

 

const 수정자로 선언된 변수는 변경할 수 없습니다. 컴파일러는 이것을 추적합니다.

당신은 아마도 그와 다른 것을 기대합니다.

 
Koldun Zloy :

당신은 아마도 그와 다른 것을 기대합니다.

분명히 예, MQL과 C# 사이를 이동할 때 모든 것이 동일할 것으로 예상합니다.

 

빌드 2366

 namespace X
{

class A
{
public :
   A(){}
};

}   //  namespace X

class B : public X::A
{
public :
   B() : X::A()  // 'X' - struct member undefined
   {
   }
};
 
Ilyas :

쪽지 감사합니다 확인하겠습니다

mq5 - 정상. mq4 - 고장났습니다. 여기에서 TypeToBytes_ExampleScript.mq4를 가져올 수 있습니다. 확장자가 mq5로 변경된 경우에만 컴파일됩니다.