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

 
A100 :

사실, 이것은 아무것도 변경하지 않습니다 - 컴파일 오류(저는 태블릿이 있습니다 - Borland 컴파일러)

흠, 그래서 당신은 언어 표준으로 가서 누구의 컴파일러가 엉망인지 확인해야 합니다.
 
Alexey Navoykov :
흠, 그래서 당신은 언어 표준으로 가서 누구의 컴파일러가 엉망인지 확인해야 합니다.
두 번째 옵션은 유사합니다.

#ifdef __BORLANDC__
class B;
class A {
         int g( B * );
         int i;
};
class B : public A {};
int A::g( B *b ) { return b->i; } //Error: E224
#endif

Mows VS 2010은 B*에서 A*로의 암시적 변환으로 비공개를 극복하기 때문입니다.


#ifdef __BORLANDC__

class B;
class A {
         int g( B * );
         int i;
};
class B : public A {};
int A::g( B *b ) { return ((A *)b)->i; } //нормально

#endif

 
Alexey Navoykov :
흠, 그래서 당신은 언어 표준으로 가서 누구의 컴파일러가 엉망인지 확인해야 합니다.
gcc 7.2는 최신 버전을 컴파일합니다. 여기에서 확인하세요.
Compiler Explorer - C++
  • About the author
  • godbolt.org
These settings control how Compiler Explorer acts for you. They are not preserved as part of shared URLs, and are persisted locally using browser local storage.
 
Комбинатор :
gcc 7.2는 최신 버전을 컴파일합니다. 여기에서 확인하세요.

결과는 다음 표입니다

 class B;
class A {                                       //MQL //BCC //VS2010 //gcc
         int f1( B *b ) { return        b .i;   } // -     -     +        +
         int f2( B *b ) { return        b .g(); } // +     -     +        +
         int f3( B *b ) { return ((A *)b).i;   } // +     +     +        +
         int f4( B *b ) { return ((A *)b).g(); } // +     +     +        +
         int f5()       { return        b .i;   } // -     -     +        +
         int f6()       { return        b .g(); } // +     -     +        +
         int f7()       { return ((A *)b).i;   } // +     +     +        +
         int f8()       { return ((A *)b).g(); } // +     +     +        +
//---
         int g() { return 0 ; }
         int i;
        B *b;
};
class B : public A {};

그리고 msdn은 다음과 같이 작성합니다. 액세스 제어는 불법적인 목적으로 개체를 사용하는 것을 방지하는 데 도움이 됩니다. 명시적 형식 변환( 형식 캐스팅 )이 수행되면 이러한 보호가 손실됩니다.
 

안녕하세요.

전략 테스터에서 시각화가 활성화되었을 때 나타나는 차트에서 지표 창을 제거하는 방법을 알려주실 수 있습니까?

MT5에서 마법사를 사용하여 생성되었습니다.

MQL5 문서 에서 IndicatoRelease가 테스터에서 작동하지 않는다는 것을 읽었습니다. (동일하게 이 함수를 OnDeinit에 삽입하려고 하면 핸들이 선언되지 않았다고 맹세하기 시작합니다. 선언하면 다른 오류가 발생합니다.)

다른 옵션이 있습니까?

 
Ahmet Garyagdyyev :

안녕하세요.

전략 테스터에서 시각화가 활성화되었을 때 나타나는 차트에서 지표 창을 제거하는 방법을 알려주실 수 있습니까?

MT5에서 마법사를 사용하여 생성되었습니다.

MQL5 문서 에서 IndicatoRelease가 테스터에서 작동하지 않는다는 것을 읽었습니다. (동일하게 이 함수를 OnDeinit에 삽입하려고 하면 핸들이 선언되지 않았다고 맹세하기 시작합니다. 선언하면 다른 오류가 발생합니다.)

다른 옵션이 있습니까?


모든 지표가 있는 템플릿을 이전에 저장한 템플릿으로 변경할 수 있습니다.

 
A100 :

결과는 다음 표입니다

VS 및 gcc는 Borland보다 오랫동안 참조*(또는 적어도 버그 발생 가능성이 낮음)로 간주되어 왔습니다. 나 자신도 여러 해 동안 Borland를 사용해 왔지만 다른 장점을 기반으로 합니다.

추신. * - 이것은 내 개인적인 의견이 아닙니다. 나는 그것에 대해 논의하지 않을 것이다.

 

동료 여러분, STL C++ 라이브러리(언어 기능 조정)를 구현하려는 시도를 경험한 사람이 있습니까? 코드베이스 배치 선호, 검색 결과 아니오, 하지만 아마도 ... . 물론 전부는 아니지만 몇 가지 기본적인 것들: 템플릿을 통한 여러 일반 컨테이너와 동일한 auto_ptr(물론 내가 직접 작성했지만 그러한 기본 요소를 스스로 작성하는 것은 어리석음입니다).
std µl 비표준은 무엇이며 STL에서 유사체의 메소드/클래스에 대한 새로운 이름을 발명해야 하는 이유는 무엇인지 이해할 수 없습니다.

 

오류를 찾았습니다. 컴파일된 텍스트를 완전히 삽입하지 않고 스크립트에서 조각으로 가져올 것입니다.

 class Source : public CObject
{
public :
   upindex_t start, top, lstart, ltop;
};

CArrayObj sourcear;

do
{
   Source *new_src = new Source;
   new_src.start = last.start;
   new_src.top = last.top;
   new_src.lstart = prev_prev.start;
   new_src.ltop = prev_prev.top;
   if ( ! sourcear.Add(new_src) )
       return ;
}
while (...);

for ( int i = 0 ;  i < sourcear.Total();  ++ i)
{
   Source cursrc = (Source*)sourcear.At(i);   //!!!!! Это не вызывает ошибки во время компиляции
}

저것들. 캐스트: CObject* --> 소스* --> 소스

아니면 까다로운 MQL 전용입니까?


추신: 그리고 이 줄을 먹습니다:

Source new_src = new Source;

말도 안되는 소리. 언어에 복사 단점/연산자가 없으며 역참조하지 않았습니다. 무슨 일이야?

 
pavlick_ :

아니면 까다로운 MQL 전용입니까?

 class A {};

void OnStart ()
{
  A a = new A;
}

기본 복사 연산자가 실행됩니다.

사유: