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

 
Alexey Navoykov :
당신은 부주의하다

아니면 당신. 요점으로 바로 가자

 
A100 :

나는 내일(10년이 아니라) 구현될 수 있는 가장 간단한 옵션을 제안했고 C++와 외부 유사성을 가질 것입니다(그렇지 않으면 왜 아무 것도 변경하지 않는 이유). 또한 operator*()가 수행되지 않았고 수행되지 않을 경우(포럼에 이에 대한 정보가 있음) operator->()가 갑자기 구현되는 이유가 명확하지 않습니다(같은 순서임)

이 형식에서는 내일이나 10년 후에 필요하지 않습니다. 그리고 외부 유사성은 필요하지 않으며 기회가 필요합니다.

C++에서 STL을 적어도 부분적으로 전송하려면. 그리고 그 문제는 operator->에만 있는 것이 아니라 여전히 필요한 것이 많다.

operator->는 스마트 포인터를 향한 첫 번째 단계가 될 것입니다.


 

사실, 지금과 같은 형태의 암시적 캐스트를 사용하면 모든 것이 썩 좋지 않습니다.

 class A
{};

class B : public A
{};

void OnStart ()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast <B*>(aa);
   Print (ba1 ? "ba1 ok" : "ba1 bad cast" ); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print (ba2 ? "ba2 ok" : "ba2 bad cast" );
}

암시적 캐스트에 동적 캐스트가 포함되어 있음을 알 수 있습니다.

하지만

첫째, 동적 캐스트가 언어에 명확하게 존재하는 경우 포함된 이유가 명확하지 않습니다.

둘째, 함수의 경우 동적 캐스트 오류는 제어할 수 있지만(출력은 잘못된 포인터임) 암시적 캐스팅은 불가능하기 때문에 매우 심하게 포함되어 있습니다! 확인되지 않은 예외가 발생하기 때문에

2018.11.23 20:31:47.348 test(AUDNZD,M5) 'test.mq5'에서 잘못된 포인터 캐스팅(17,11)

그에게서 정확히 제로 감각이 있습니다.

유효하지 않은 포인터를 함수로 제공하거나 암시적 캐스트에서 동적 캐스트를 제외 하고 컴파일 오류 를 제공해야 합니다.

 

예, 이 문제가 있는 경우 OOP로 작업하는 것이 제대로 제어되지 않고 신뢰할 수 없습니다. 어딘가에서 프로그램의 한 곳에서 유형을 변경했는데 어딘가에서 폭발했습니다. 이 예에서는 여전히 목발의 도움으로 어떻게든 벗어날 수 있습니다. 포인터의 간단한 할당이 있으며 모든 것이 눈 앞에 있습니다. 그리고 일반적인 경우 포인터가 어떤 함수에 전달되고 알 수 없는 대상으로 동적으로 캐스트되면 어떤 식으로든 포인터를 제어할 수 없습니다.

 
Alexey Navoykov :

점은 MQL의 범용 연산자입니다.

찾는 것과 같습니다. 우리는 그것이 보편적이라고 말할 수 있습니다: 그것은 객체와 포인터 모두와 함께 작동합니다.

그리고 당신은 그렇게 말할 수 있습니다. 객체에 대해서만 작동하고 포인터가 암시적으로 객체에 캐스팅되는 경우에만 포인터에 대해 작동합니다. 언제

 class A {
public :
     void f() {}
} *a;

기입

    a.f();

하지 않은 것과 동일합니다.

    a->f();


    (*a).f();
 

그런 구조가 있다

 struct OrdersInfo
{
   int       ticket;
   string    symbol;
   int       type;
   double    volume;
   double    open_price;
   double    stop_loss;
   double    take_profit;
   string    comment;
   int       magic;
};

파일에 쓰려고 할 때 변수 OrdersInfo 순서가 있습니다.

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

컴파일러 출력: 'order' - 개체를 포함하는 구조는 허용되지 않습니다.

무엇이 문제가 될 수 있습니까?


 
Andrii Djola :

그런 구조가 있다

파일에 쓰려고 할 때 변수 OrdersInfo 순서가 있습니다.

컴파일러 출력: 'order' - 개체를 포함하는 구조는 허용되지 않습니다.

무엇이 문제가 될 수 있습니까?


여기

https://www.mql5.com/ru/docs/files/filewritestruct

제한 사항이 나열됩니다.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
고맙습니다
 

VPS 의 MT4 트래픽이 음수이고 기록 다운로드가 시작되었으며 카운터가 증가하기 시작했습니다 ...


 
어떤 작가의 제품 페이지에 가보면 어떤 제품이 올바른 플랫폼(4 또는 5)에 적합한지 이해할 수 없습니다. 이 페이지의 제품을 플랫폼별로 분류할 수 있습니까?