Bonjour,

Ce n'est pas un problème rencontré mais plutôt une curiosité :

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;
}
Avec MSVC2010 (je précise car avec mingw j'ai autre chose) il me dit :

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !