Bonjour à tous,
Me remettant plus sérieusement au c++ j'ai expérimenté une classe que définirai les opérateur logique >, <, ==, ...
Il s'agit d'un expérimentation pour comprendre le principe et le concept.
La Méthode:
Code :
- virtual int compare(T&t)=0;
|
dans la classe mère retourne la valeur
Les opérateurs sont défini comme suit.
Exemple:
Code :
- bool operator==(T&t){return(compare(t)==0);} ...
|
La classe fonctionne très bien quand elle est hérité
Code :
- class Integer:public Logic<Integer>
- {...}
|
Voilà mon problème
Je me suis dit que ça serait bien de pouvoir comparer des types différents alors j'ai fait ceci.
Code :
- class Integer:public Logic<Integer>,public Logic<Float>
- {...}
|
Avant la compilation des erreur sont générés
Citation :
IntelliSense: more than one operator "<" matches these operands:"Logic<T>::operator< [with T=Integer]" (ambiguous by inheritance) operand types are: Integer < Float
|
Ainsi de suite pour chaque opérateurs définis...
Mais à la compilation tous fonctionne comme il se doit l'exécution est implacable. J'utilise le Microsoft Visual C++ 2013 Quand je transfère le code sur Arduino le premier cas fonctionne parfaitement mais le second cas ne fonctionne pas j'ai les messages d'erreurs suivants.
Citation :
error: request for member 'operator<' is ambiguous
note: candidates are: bool Logic<T>::operator<(T& ) [with T = Float]
|
Y-à-t'il une meilleur façon de faire pour que ce soit portable. Quelle est mon erreur. J'aimerai m'assurer qu'avant la compilation mon ide Visual c++ ne génère pas d'erreur et que ça fonctionne sur les deux plate-forme
Voici le code complet sur VC++:
Code modifier pour le Arduino.
Fonctione mais quand je change les Héritages et un Integer pour un Float c'est la catastrophe.
Ça ne compile pas.
Merci à l'avance.
Message édité par xstf le 24-02-2018 à 03:15:42