ternaire et erreur bizarre
Bonjour,
Ce n'est pas un problème rencontré mais plutôt une curiosité :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class A
{
public:
A(){}
};
class B : public A
{
public:
B() : A(){}
};
class C : public A
{
public:
C() : A(){}
};
A *test(int i)
{
return (i ? (new B) : (new C));
}
int main()
{
test(0);
return 0;
} |
Avec MSVC2010 (je précise car avec mingw j'ai autre chose) il me dit :
Citation:
main.cpp: erreur : C2446: "pas de conversion de 'B *' en 'A *'. Les types points n'ont aucun rapport entre eux, conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction"
Etrange non ? J'avais testé avec un autre compilateur hier et il m'avait sorti une même erreur. Après une petite recherche, les seules solutions que j'avais trouvé étaient de caster. Mais pourquoi ? En temps normal quand on renvoie quelque chose comme ça :
Code:
1 2 3 4
| A *test()
{
return new B;
} |
ça fonctionne parfaitement. Bien que le problème n'en soit pas vraiment (il suffirait de faire un if else après tout), je suis curieux de comprendre d'où cela provient.
Merci d'avance !