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

 
Alexey Kozitsyn :
구조에 기본 생성자를 추가합니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.09.06 09:38

 // Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
   int i;
};
 
fxsaber :

부주의합니다 :) 이것이 왜 필요한지 설명해 주시겠습니까? 생성자를 사용할 수 없는 이유는 무엇입니까?

아니면 private 필드에 구조체 초기화 오류를 표시하기 위한 것입니까?

 
Alexey Kozitsyn :

부주의합니다 :) 이것이 왜 필요한지 설명해 주시겠습니까? 생성자를 사용할 수 없는 이유는 무엇입니까?

내 코드를 작성할 때 내 구조가 통합에 관련된 상황을 정확히 접했기 때문입니다. 빈 생성자가 있는 솔루션이 바로 떠올랐지만 코드에 유니온이 있다는 아쉬움이 있었습니다. 그러므로 나는 지루함을 위해서가 아니라 실제 적용을 위해 질문합니다.


나는 이 "버그"(버그인지 아닌지) 를 피하기 위해 그러한 변태를 작성해야 했습니다.

 // Зануляем структуру без конструктора со скрытыми полями
template < typename T>
void StructToNull( T& Struct )
{    
  union TMP_UNION
  {
    T Struct;
    
     struct TMP_STRUCT
    {
       uchar Array[ sizeof (T)];
    } Tmp;
    
    TMP_UNION( T& Value )
    {
      :: ArrayInitialize ( this .Tmp.Array, 0 );
      
      Value = this .Struct;
    }
  } TmpUnion(Struct);    
}


나는 아직 다른 해결책을 보지 못했습니다.

 
fxsaber :
시작하고 문제를 보았습니다. 이제 공용 필드가 있는 구조만 공용체에서 사용할 수 있는 것 같습니다. 그러면 다음과 같이 작성할 수 있습니다. struct = {0};
 
Alexey Kozitsyn :
시작하고 문제를 보았습니다. 현재 공용 필드가 있는 구조체만 공용체에서 사용할 수 있는 것 같습니다 . 그러면 다음과 같이 작성할 수 있습니다. struct = {0};

그렇지 않습니다 .

 

내가 다시 당신을 오해했을 수도 있지만 이 코드는 경고 없이 작동합니다.

 struct STRUCT
{
//private:
   int i;

};

// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
   int i;
};

// Обходим Warning "possible use of uninitialized variable"
template < typename T>
void StructInit( T& ) {}

STRUCT Func()
{
  STRUCT Res = { 0 }; // ок!
  
//  StructInit(Res); // с этой строкой Warning не появляется, но это какой-то абсурд!
  
   return (Res);  
}

void OnStart ()
{
  Func();
}
 
Alexey Kozitsyn :

내가 다시 당신을 오해했을 수도 있지만 이 코드는 경고 없이 작동합니다.

맞습니다. 공공 구조가 초기화됩니다. 하지만 노조는 그런 게 없다.


흥미롭게도 숨겨진 필드가 있는 구조가 새 구조의 공개 필드가 되면 모든 필드가 열려 있어도 새 구조가 초기화되지 않습니다.

 

안녕하세요! 말해봐, 배열을 선언할 수 있습니까? 변수를 통해 그 안에 있는 요소의 수를 나타냅니까? 그렇지 않다면 이 작업을 어떻게 수행할 수 있습니까?

 extern int Period = 10 ;
int Massiv[ Period ]; //Выдаёт ошибку: "invalid index value"
 
giros :

안녕하세요! 말해봐, 배열을 선언할 수 있습니까? 변수를 통해 그 안에 있는 요소의 수를 나타냅니까? 그렇지 않다면 이 작업을 어떻게 수행할 수 있습니까?

https://www.mql5.com/ru/docs/array/arrayresize

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
giros :

안녕하세요! 말해봐, 배열을 선언할 수 있습니까? 변수를 통해 그 안에 있는 요소의 수를 나타냅니까? 그렇지 않다면 이 작업을 어떻게 수행할 수 있습니까?


배열 크기 조정()