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 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
s_uint i = 15u;
s_float f = i/10.0f;
... 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
3
4
5
s_uint s_uint::operator/ (s_uint)
 
et
 
s_float s_uint::operator/ (s_float)
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
6
7
s_uint(unsigned int uiValue);
s_uint(s_float fValue);
 
et
 
s_float(float fValue);
s_float(s_uint uiValue);
Le compilateur � donc deux options :
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 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
s_str s1 = "ça";
s_str s2 = "salut " + s1 + " va ?";
... me donne :
error: no match for 'operator+' in '"salut " + s1'
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 ?


Merci d'avance pour vos r�ponses !