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

 
Alexey Navoykov :

기본 클래스가 파생 클래스로 암시적으로 캐스트되는 버그가 MQL에서 여전히 수정되지 않는 이유는 무엇입니까? 컴파일러 경고 도 아닙니다!

아마도 이 올바른 디자인 때문에

 class A {  };

class B : public A { };

A * a;

B* b= a;   // Нет ошибки

당신의 것을 고려하지 않았습니다.

 
fxsaber :

아마도 이 올바른 디자인 때문에

당신의 것을 고려하지 않았습니다.

이것은 정확히 같은 잘못된 디자인입니다.
 
Alexey Navoykov :
이것은 정확히 같은 잘못된 디자인입니다.

기본 클래스에 대한 포인터 다음에 파생 개체가 오면 이는 훌륭한 구성입니다.

 
fxsaber :

기본 클래스에 대한 포인터 다음에 파생 개체가 오면 이는 훌륭한 구성입니다.

나는 논쟁하지 않고 이것이 실수라고 단순히 믿기를 제안합니다.
 
Alexey Navoykov :
나는 논쟁하지 않고 이것이 실수라고 단순히 믿기 를 제안합니다.

이 동사는 기술 포럼에서 제대로 적용되지 않습니다. 시도한 C++

 class A {  };

class B : public A { };

A* a = new B;

B* b= dynamic_cast <B*>(a); // cannot dynamic_cast ‘a’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
B* b1= a; // invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]

어떤 옵션도 작동하지 않았습니다. 이유는 명확하지 않습니다.

 
Koldun Zloy :

그것들을 교환 가능하게 만들면 둘 다 단순히 필요하지 않습니다.

C++에서는 다음이 가능합니다.

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

 
Alexey Navoykov :

기본 클래스가 파생 클래스로 암시적으로 캐스트되는 버그가 MQL에서 여전히 수정되지 않는 이유는 무엇입니까? 컴파일러 경고 도 아닙니다!

컴파일 오류를 예상하고 있습니까? 이 경우에는 dynamic_cast이기 때문에 그렇게 해서는 안 됩니다.
 
TheXpert :
컴파일 오류를 예상하고 있습니까? 이 경우에는 dynamic_cast이기 때문에 그렇게 해서는 안 됩니다.
위를 참조하십시오. fxsaber는 C++ 코드를 제공했습니다.
 
Alexey Navoykov :
위를 참조하십시오. fxsaber는 C++ 코드를 제공했습니다.

컴파일

 class A 
{ 
public :
     virtual ~A() = default ; 
};

class B : public A { };

int main( void )
{
    A* a = new B;
    B* b= dynamic_cast <B*>(a);
     return 0 ;
}
 
TheXpert :

컴파일

당신은 부주의하다