Bonjour,
Ce n'est pas un problème rencontré mais plutôt une curiosité :
Avec MSVC2010 (je précise car avec mingw j'ai autre chose) il me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 :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"
ç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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A *test() { return new B; }
Merci d'avance !
Partager