Quem está a resolver o problema agora, quando um método de modelo numa classe de modelo não é encontrado pelo compilador por alguma razão e ocorre um erro?
no one of overloads can be applied to the function call
?
Os compiladores C em tais casos escrevem especificamente que tipos foram substituídos e que funções com que protótipo não são encontrados, por isso é mais ou menos claro qual é o problema, mas aqui - não há especificações.
Gostaria de ver a regra exacta: quando é que tenho o direito de anular uma função virtual com um tipo diferente de valor de retorno?
Apenas um único caso, ao devolver um ponteiro a um objecto de classe, quando o tipo de retorno da função de overridden herda (é o primeiro pai em herança múltipla, ainda não suportado em MQL) do tipo que o overridden devolve.
Ilyas: Tem um erro no seu exemplo - não há herança de D de C
Sim, erro meu, desculpem.
class A {};
class B : A {};
class C {
virtual B *f() { returnNULL; }
};
class D : C {
virtual A *f() { returnNULL; } //Error: overriding virtual function with different return type
};
class C;
class A {
virtual A *f() { returnNULL; }
};
class B : A {
virtual C *f() { returnNULL; } //Error: overriding virtual function with different return type
};
class C : B {
virtual C *f() { returnNULL; } //нормально
};
Ilyas: Apesar do erro (porque não haverá geração executável), a função B::f anula A::f, pelo que não há erro de anulação para C::f.
Não percebo bem a ideia, mas é quase a mesma
class C;
class A {
virtual A *f() { returnNULL; }
};
class B : A {
virtual C *f() { returnNULL; } //Error: overriding virtual function with different return type
};
class C : A {};
class C;
class A {
virtual A *f() { returnNULL; }
};
class C : A {};
class B : A {
virtual C *f() { returnNULL; } //нормально
};
Há um erro num caso e nenhum erro no outro. E eu apenas troquei as linhas
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Quem está a resolver o problema agora, quando um método de modelo numa classe de modelo não é encontrado pelo compilador por alguma razão e ocorre um erro?
no one of overloads can be applied to the function call
?
Os compiladores C em tais casos escrevem especificamente que tipos foram substituídos e que funções com que protótipo não são encontrados, por isso é mais ou menos claro qual é o problema, mas aqui - não há especificações.
Fizemo-lo deliberadamente, uma vez que não há qualquer problema com a herança directa.
Gostaria de ver a regra exacta: quando é que tenho o direito de anular uma função virtual com um tipo diferente de valor de retorno?
Ou é uma sobrecarga?
Gostaria de ver a regra exacta: quando é que tenho o direito de anular uma função virtual com um tipo diferente de valor de retorno?
Obrigado. Tudo isto faz sentido.
...quando o tipo de retorno de uma função anulada é herdado ... do tipo devolvido pelo anulado.
E se for o contrário?
E se for o contrário?
Tem um erro no seu exemplo - não há herança de D de C
Sim, erro meu, desculpem.
Outro exemplo controverso:
Outro exemplo controverso:
Apesar do erro (porque não haverá geração executável), a função B::f anula A::f, pelo que não há erro de anulação para C::f.
Não percebo bem a ideia, mas é quase a mesma
Há um erro num caso e nenhum erro no outro. E eu apenas troquei as linhas