bonjour,

j'ai la structure suivante
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
class AcquisitionBase  {
private:
double value;
public:
virtual string toString() = 0;
virtual double getInvariantValue() = 0;
}
 
template<typename T>
class Acquisition: public AcquisitionBase{
private:
T v;
public:
Acquisition(T vlaue) : v(value) {
}
virtual string toString() {
    return "information";
}
virtual double getInvariantValue() {
    return (double)v;
}
}
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
typedef float ANALOG;  		
typedef unsigned short DIGITAL; 
typedef bool LOGIC;
et je veux implémenter l’opérateur + (par exemple mais en fait je vais les faires tous) pour faire des calcul avec
Acquisition<ANALOG> + Acquisition<DIGITAL> etc ....

donc dans le template j'ai ajouté
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
virtual Acquisition<T> operator+(AcquisitionBase &ob) {
	return Acquisition<T>(
		this->getInvariantValue() + ob.getInvariantValue());
}
mais j'ai l'erreur suivante quand je rajoute l’opérateur pour les littéraux (dont j'ai aussi besoin évidement pour faire Acquisition<ANALOG> + 21)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
template<typename T>
Acquisition<T> operator+(Acquisition<T> &ref, int ob) {
	return Acquisition<T>(ref.getInvariantValue() + ob);
}
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:

étonnamment quand je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
template<typename T>
Acquisition<T> operator+(int ob) {
	return Acquisition<T>(this->getInvariantValue() + ob);
}
je n'ai pas d'erreur, mais si j'ai mis un opérateur externe c'est pour résoudre les deux cas
  • Acquisition<ANALOG> +21
  • 21 + Acquisition<ANALOG>


avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
template<typename T>
Acquisition<T> operator+(int ob, Acquisition<T> &ref) {
	return ref + ob;
}
bref avez vous une solution pour
  • soit éviter d'afficher cette erreur (je suis sur linux avec g++ 4.4.6)
  • soit changer la structure


merci et bonne soirée de Noël a vous tous....

NOTA : sur visual studio 2013 j'ai pas d'erreurs