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

 

파생 클래스에 대한 기본 클래스 포인터를 명시적으로 캐스팅할 때 약식 접미사 operator++ 표기법이 컴파일되지 않습니다.

 class A {
};

class B : public A {
public :
         void      operator ++( int ) {}
         void      operator ++()      {}
};

void f( A* a )
{
        ((B *)a). operator ++( 0 ); //нормально
        ((B *)a). operator ++();     //нормально
        ++((B *)a);               //нормально
        ((B *)a)++;               //ошибка
}
 
적어도 컴파일러는 af()가 const가 아니라는 경고를 주어야 합니다.
 class A {
public :
         int f() { return ( 1 ); }
};

class B {
public :
                B( const A *aa ) : a( aa ) {}
         int g() { return ( a.f() ); } //должно быть предупреждение, поскольку a.f() не const
         const A *a;
};
 
A100 :
적어도 컴파일러는 af()가 const가 아니라는 경고를 주어야 합니다.
관심을 가져주셔서 감사합니다. 두 오류가 모두 수정되었습니다.
 
mql5 :
관심을 가져주셔서 감사합니다. 두 오류가 모두 수정되었습니다.
마지막 하나만 공식적으로 오류가 아닙니다. 경고만 있어야 합니다. 다음 경우에만 오류
 class B {
public :
        A * const a;
};

그러나 템플릿에서. 예는 나중에 제공됩니다.

 

여기도 명확하지 않습니다.

 class A {
public :
};

void ex1( const A* &t1, const A* &t2 )
{
         const A* t = t1;
        t1 = t2;
        t2 = t;
}

void OnStart ()
{
     const A *a1 = new A(), *a2 = new A();
    Print ( "Было :" a1, " ", a2 ); // Было :1 2
    ex1( a1, a2 );
    Print ( "Стало:" a1, " " , a2 ); // Стало:2 1
    delete ( a1 );
    delete ( a2 );
}

모든 것이 올바르게 작동하지만 중간 함수 ex2(...)를 추가하면

 void ex2( const A* &t1, const A* &t2 ) { ex1( t1, t2 ); }

void OnStart ()
{
    сonst A *a1 = new A(), *a2 = new A();
    Print ( "Было: " , a1, " ", a2 ); // Было :1 2
    ex2( a1, a2 );
    Print ( "Стало:", a1, " ", a2 ); // Cтало:2 2           <-----
    delete ( a1 ); delete ( a2 );
}

결과가 다릅니다. ex2(...)는 무엇을 했습니까? - 참조로 포인터를 추가로 전달했습니다.

봐주세요

 
A100 :

여기도 명확하지 않습니다.

모든 것이 올바르게 작동하지만 중간 함수 ex2(...)를 추가하면

결과가 다릅니다. ex2(...)는 무엇을 했습니까? - 참조로 포인터를 추가로 전달했습니다.

봐주세요

감사합니다. 언어 최적화 프로그램 버그가 수정되었습니다.
 

처음은 아니지만 업로드할 때 사진을 여기서만 얻습니다. 즉, 몇 가지 기준이 있습니다(아마도 특정 크기가
). 모든 곳에서 정상적으로 표시됩니다. 무슨 일인지 알려주세요.


 
매크로에서 결과형 변환을 사용하고 나중에 반환값을 사용하지 않으면 불필요한 컴파일 에러가 발생한다 (필요할 때도 있고 아닐 때도 있음)
 int g( int x ) { return ( x ); }

#define F( X )    ( long )g( X )

void OnStart ()
{
         int f = F( 0 ); //нормально
        F( 0 );         //ошибка компиляции
}
 
A100 :
매크로에서 결과형 변환을 사용하고 나중에 반환값을 사용하지 않으면 불필요한 컴파일 에러가 발생한다 (필요할 때도 있고 아닐 때도 있음)

정의의 사용과 관련이 없습니다.

단순하게 정의하는 것과 동일한 오류도 발생합니다.

( long )g( 0 );


'(long)' - expression has no effect


추신: 이제 경고가 표시됩니다.

 

표시기를 다시 컴파일한 후 동적 배열 로 작업할 때 "배열이 범위를 벗어남" 오류가 표시되기 시작했습니다.

이전에는 없었습니다. 무엇을 할까요?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
사유: