comprennent
#include <functional>
using namespace std;
int main() {
binary_function<double, double, double> operations[] = {
plus<double>(), minus<double>(), multiplies<double>(), divides<double>()
};
double a, b;
int choice;
cout << "Enter two numbers" << endl;
cin >> a >> b;
cout << "Enter opcode: 0-Add 1-Subtract 2-Multiply 3-Divide" << endl;
cin >> choice;
cout << operations[choice](a, b) << endl;
}
et l'erreur que je reçois est:std :: binary_function - aucune correspondance pour l'appel?
Calcy.cpp: In function ‘int main()’:
Calcy.cpp:17: error: no match for call to ‘(std::binary_function<double, double, double>) (double&, double&)’
Quelqu'un peut-il expliquer pourquoi je reçois cette erreur et comment se débarrasser de lui?
Pourquoi ne pas le drapeau du compilateur une erreur sur la première ligne de 'main()'? Si cette définition de tableau est autorisée, les appels aux fonctions stockées dans le tableau doivent l'être également. Pourquoi cette erreur alors? –
Il fait juste ce que vous avez besoin de faire. 'binary_function' (ou ce qui importe pour tout autre type dans la bibliothèque standard) ne mérite pas un traitement spécial de la part du compilateur. Puisque 'plus' ... hérite de' binary_function', l'affectation est correcte et vous obtenez un découpage. Le compilateur ne parvient pas à compiler la dernière ligne car 'double operator() (double, double)' n'est pas défini dans 'binary_function', tout comme l'appel de toute méthode ajoutée dans une classe dérivée par une base échouerait ... –
@David: D'accord, je l'ai compris maintenant. Merci. Postez-le comme réponse et je l'accepterai. –