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 :
virtualint compare(T&t)=0;
dans la classe mère retourne la valeur
-1 si <
0 si =
1 si >
Les opérateurs sont défini comme suit.
Exemple:
Code :
booloperator==(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 :
#include <iostream>
using namespace std;
template <class T>
class Logic
{
public:
Logic(){}
virtualint compare(T &l) = 0;
booloperator==(T &t){ return(compare(t) == 0); }
booloperator!=(T &t){ return(compare(t) != 0); }
booloperator<=(T &t){ return(compare(t) <= 0); }
booloperator>=(T &t){ return(compare(t) >= 0); }
booloperator<(T &t){ return(compare(t) < 0); }
booloperator>(T &t){ return(compare(t) > 0); }
};
class Float;
class Integer;
class Float :virtualpublic Logic<Float>, virtualpublic Logic<Integer>
Marsh Posté le 24-02-2018 à 00:39:57
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:
dans la classe mère retourne la valeur
Les opérateurs sont défini comme suit.
Exemple:
La classe fonctionne très bien quand elle est hérité
Voilà mon problème
Je me suis dit que ça serait bien de pouvoir comparer des types différents alors j'ai fait ceci.
Avant la compilation des erreur sont générés
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.
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