MQL5의 OOP에 대한 질문 - 페이지 81

 

캐스팅에 대한 또 다른 질문

이 코드가 있습니다:

 struct SHash
   {
       ulong hash[ 2 ];
      SHash()                                {  }
      SHash( const double )                    { ArrayInitialize (hash, 0xAAAAAAAAAAAAAAAA );                }
      SHash( const SHash &val)                { ArrayCopy (hash, val.hash);                                }
       bool operator ==( const SHash &val) const { return (hash[ 0 ] == val.hash[ 0 ] && hash[ 1 ] == val.hash[ 1 ]); }
   };
//+------------------------------------------------------------------+
class BASE
{
private :
   const SHash _hash;
protected :
   BASE(SHash &hash): _hash(hash)             {  }
};

class A:BASE
{
public :
   A(SHash &hash):BASE(hash)                 {  }
};


class B:BASE
{
public :
   B():BASE((SHash) 0.0 )                      {  }
};

//+------------------------------------------------------------------+
void OnStart ()
{
   SHash h( 0.0 );
   A a(h);
}
//+------------------------------------------------------------------+

매개변수가 없는 생성자로 클래스 B를 초기화하고 싶지만 SHash 구조를 SHash(const double) 생성자로 캐스트할 수 없습니다.

저것들. 일부 캐스팅(SHash)이 필요합니다.

내 예제 컴파일러 오류: '(SHash)' - 잘못된 캐스트 작업


다음과 같이 작성된 경우:

 class B:BASE
{
public :
   B():BASE( 0.0 )                      {  }
};
오류: '0.0' - 매개변수가 참조로 전달됨, 변수가 예상됨

 
Igor Makanu :

캐스팅에 대한 또 다른 질문

이 코드가 있습니다:

매개변수가 없는 생성자로 클래스 B를 초기화하고 싶지만 SHash 구조를 SHash(const double) 생성자로 캐스트할 수 없습니다.

저것들. 일부 캐스팅(SHash)이 필요합니다.

내 예제 컴파일러 오류: '(SHash)' - 잘못된 캐스트 작업


다음과 같이 작성된 경우:

오류: '0.0' - 매개변수가 참조로 전달됨, 변수가 예상됨

class B:BASE
{
public :
   B():BASE(SHash())                      {  }
};
 
Vladimir Simakov :

그것이 작동 방식입니다

그러나 초기화 0xAAAAAAAAAAAAAAAAAA는 SHash 구조에 필요합니다 - 이것은 일부 NULL입니다 - 테스트 문자열에서 얻을 수 없는 MD5 해시(선택됨)

SHash() 생성자는 지금은 필요하지 않은 것 같지만 며칠 전에는 필요한 것 같았습니다))) , 즉. 처음에 나는 그것을 가지고 있지 않았고, 그 다음 어딘가에이 빈 생성자로 컴파일 오류 를 수정했습니다. 구조를 비교할 때나 초기화 중에 ... 일반적으로 필요할 가능성이 큽니다 .... 것처럼 보이지만 모든 변수를 초기화하는 좋은 규칙처럼 ....

일반적으로 여전히 옵션이 있거나 모호하지 않습니다. 아니요)))

 
Igor Makanu :

그것이 작동 방식입니다

그러나 초기화 0xAAAAAAAAAAAAAAAAAA는 SHash 구조에 필요합니다 - 이것은 일부 NULL입니다 - 테스트 문자열에서 얻을 수 없는 MD5 해시(확인됨)

SHash() 생성자는 지금은 필요하지 않은 것 같지만 며칠 전에는 필요한 것 같았습니다))) , 즉. 처음에 나는 그것을 가지고 있지 않았고, 그 다음 어딘가에이 빈 생성자로 컴파일 오류 를 수정했습니다. 구조를 비교할 때나 초기화 중에 ... 일반적으로 필요할 가능성이 큽니다 .... 것처럼 보이지만 모든 변수를 초기화하는 좋은 규칙처럼 ....

일반적으로 여전히 옵션이 있거나 모호하지 않습니다. 아니요)))

SHash(0.0)

, 그리고 자신을 추측?)))

 
Vladimir Simakov :

, 그리고 자신을 추측?)))

SHash(( double )x)
 
Vladimir Simakov :

, 그리고 자신을 추측?)))

 class B:BASE
{
public :
   B():BASE(SHash( 0.0 ))                      {  }
};

젠장 작동합니다!

저도 해봤는데 왜 안되는지 이해가 안됩니다.

감사하다!

열심히 망했다(((

 
Alexandr Andreev :

네, 하지만 클래스 생성자 에서 x는 어디서 얻나요?)))

 
Vladimir Simakov :

네, 하지만 클래스 생성자 에서 x는 어디서 얻나요?)))

요점은 x가 아님) 그러나 리셉션에 이중 외에 플로트가있을 수 있다는 사실은 단순히 0.0을 표시하십시오. 또한 신뢰할 수 없음

 
Alexandr Andreev :

요점은 x가 아님) 그러나 리셉션에 이중 외에 플로트가있을 수 있다는 사실은 단순히 0.0을 표시하십시오. 또한 신뢰할 수 없음

이 모든 것이 그러한 세부 사항이지만 ...별로 중요하지 않습니다.

 
Alexandr Andreev :

요점은 x가 아님) 그러나 리셉션에 이중 외에 플로트가있을 수 있다는 사실은 단순히 0.0을 표시하십시오. 또한 신뢰할 수 없음

int가 이 특정 생성자를 호출하기 위한 임의의 숫자이더라도 초기화할 항목이 없습니다.

오타가 없도록 0.0을 선택했습니다. 0.0. 쓰기와 타이핑은 123보다 어렵다