Erros, bugs, perguntas - página 2327

 
Alexey Navoykov:

Porque é que a MQL não corrigiu o bug de que uma classe base é implicitamente lançada para uma classe derivada? Nem sequer um aviso do compilador!

Deve ser devido a esta construção correcta

class A {  };

class B : public A { };

A* a;

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

não foi tida em conta.

 
fxsaber:

Provavelmente devido a esta concepção correcta

não levou a sua em conta.

Esta é exactamente a mesma construção incorrecta.
 
Alexey Navoykov:
É exactamente a mesma construção incorrecta.

Se existe um objecto de classe derivado por detrás de um ponteiro para uma classe base, essa é uma grande construção.

 
fxsaber:

Se houver um objecto de classe derivado por detrás do ponteiro para a classe base, este é um grande desenho.

Sugiro que não discutam e acreditem que se trata de um erro.
 
Alexey Navoykov:
Sugiro não discutir, mas acreditem que se trata de um erro.

Este verbo é pouco aplicável num fórum técnico. Triado 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]

Nenhuma das opções funcionou. As razões não são claras.

 
Koldun Zloy:

Se os tornar permutáveis, então ambos são simplesmente desnecessários.

Em C++, isto é possível:

Sugeri a variante mais simples que poderia ser implementada amanhã (não em 10 anos) e que teria uma semelhança externa com C++ (caso contrário, porquê mudar seja o que for). Além disso, se operador*() não é e não será implementado (havia informação sobre isso no fórum), não é claro porque é que operador->() seria subitamente implementado (são da mesma ordem).

 
Alexey Navoykov:

Porque é que a MQL não corrigiu o bug de que uma classe base é implicitamente lançada para uma classe derivada? Nem sequer um aviso do compilador!

Está à espera de um erro de compilação? Não deve haver nenhum, porque neste caso é dynamic_cast
 
TheXpert:
Está à espera de um erro de compilação? Não deve haver nenhum, porque neste caso é dynamic_cast
Ver acima, o fxsaber forneceu o código C++.
 
Alexey Navoykov:
Ver acima, o fxsaber forneceu o código C++.

compilado por

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:

compilado por

Não estás a prestar atenção.