bonjour,
j'ai la structure suivante
avec
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; } }
et je veux implémenter l’opérateur + (par exemple mais en fait je vais les faires tous) pour faire des calcul 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;
Acquisition<ANALOG> + Acquisition<DIGITAL> etc ....
donc dans le template j'ai ajouté
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
5 virtual Acquisition<T> operator+(AcquisitionBase &ob) { return Acquisition<T>( this->getInvariantValue() + ob.getInvariantValue()); }
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
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); }
étonnamment quand je fais
je n'ai pas d'erreur, mais si j'ai mis un opérateur externe c'est pour résoudre les deux cas
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); }
- Acquisition<ANALOG> +21
- 21 + Acquisition<ANALOG>
avec
bref avez vous une solution pour
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; }
- 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
Partager