Salut à vous !
J'explique mon problème :
Je travaille en ce moment à créer des classes alternatives pour les types de donnée de base (int, float, ...).
Le soucis c'est que je n'arrive pas à dompter le compilo...
Exemple, si j'écris :
... hé bien le compilateur me dis qu'il y a "ambigous overload" entre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 s_uint i = 15u; s_float f = i/10.0f;
Les seuls constructeurs qui peuvent servir dans ce cas sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 s_uint s_uint::operator/ (s_uint) et s_float s_uint::operator/ (s_float)
Le compilateur à donc deux options :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 s_uint(unsigned int uiValue); s_uint(s_float fValue); et s_float(float fValue); s_float(s_uint uiValue);
10.0f -> s_float(10.0f) -> operator/ (s_float)
10u -> s_uint(10u) -> operator/ (s_uint)
Mon 10.0f se trouve miraculeusement transformé en entier. Y a-t-il un moyen d'empêcher ça ? Je peux comprendre qu'un entier puisse être transformé en float automatiquement, mais là...
Autre soucis :
J'ai créé une classe dans le même style pour gérer les chaines de caractères (basée sur std::string), et j'ai des erreurs de compilation que je n'avais pas avec std::string :
... me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 s_str s1 = "ça"; s_str s2 = "salut " + s1 + " va ?";
J'imagine qu'il cherche un "operator+ (s_str)" pour const char*, ce qui biensûr n'existe pas. Or, avec std::string : pas de problème. Comment font-ils ?error: no match for 'operator+' in '"salut " + s1'
Merci d'avance pour vos réponses !
Partager